我有一个通过执行此操作获得的文件列表: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
来获取第一个文件,我需要循环所有这些文件。
我怎么知道何时没有更多文件需要处理?
答案 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