循环浏览Bash中的文件列表

问题描述 投票:2回答:3

我有一个文件列表,我通过执行这个:ls core_* | sort -n -t _ -k 2

这给了我这样的东西:

core_20171201142359.csv core_20171202131548.csv core_20171203141112.csv

目标是获得一个文件,在其中按顺序附加每个文件的所有内容。

因此,我想逐个打开每个文件,将其内容复制到另一个文件中,将以前的源文件移动到另一个目录以便保管并继续。

为了总是得到第一个文件,我使用ls core_* | sort -n -t _ -k 2 | head -1,我需要循环所有这些文件。

我怎么知道什么时候没有我需要处理的文件?

bash shell csv
3个回答
0
投票
for file in $(ls core_* | sort -n -t _ -k 2)
do
    cat ${file} >> one_big_file.csv
    mv ${file} /anywhere/you/want
done

将读取每个文件,将所有行复制到one_big_file.csv中,删除只读取文件到/ anywhere / you / want


1
投票

你可以试试这个:

ls core_* | sort -n -t _ -k 2 | while read f; do cat $f >> total.csv; done

cat一起,你可以执行move等。


1
投票

对于bash,您可以将文件名存储在数组中:

files=(core_*)

然后第一个条目是

first="${files[0]}"

你可以用这个迭代(绝对需要引号)

for file in "${files[@]}"; do
    echo "$file"
done

或者,如果您需要同时对所有文件执行某些操作:

cat "${files[@]}" > core_all.csv

但如果是这样的话,你根本不需要存储它们

cat core_* > core_all.csv
© www.soinside.com 2019 - 2024. All rights reserved.