[英]Loop Through List of Files in Bash
我有一個通過執行此命令獲得的文件列表: ls core_* | sort -n -t _ -k 2
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
ls core_* | sort -n -t _ -k 2 | head -1
ls core_* | sort -n -t _ -k 2 | head -1
,我需要循環所有這些文件。
我如何知道何時不再需要處理文件?
你可以試試這個:
ls core_* | sort -n -t _ -k 2 | while read f; do cat $f >> total.csv; done
與cat
一起,您還可以執行move
等操作。
對於 bash,您可以將文件名存儲在一個數組中:
files=(core_*)
然后第一個條目是
first="${files[0]}"
你可以迭代這個(引號是絕對需要的)
for file in "${files[@]}"; do
echo "$file"
done
或者,如果您需要一次處理所有文件:
cat "${files[@]}" > core_all.csv
但如果是這樣,你根本不需要存儲它們
cat core_* > core_all.csv
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.