簡體   English   中英

循環遍歷 Bash 中的文件列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM