循环浏览Bash中的文件列表

时间:2017-12-27 11:28:29

标签: bash shell csv

我有一个通过执行此操作获得的文件列表: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来获取第一个文件,我需要循环所有这些文件。

我怎么知道何时没有更多文件需要处理?

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

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

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

答案 1 :(得分: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

答案 2 :(得分: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