簡體   English   中英

Bash:如何遍歷目錄結構並執行命令?

[英]Bash: how to traverse directory structure and execute commands?

我已將一個大文本文件拆分為多個較小的文件集,用於我正在進行的性能測試。 有很多這樣的目錄:

/home/brianly/output-02 (contains 2 files myfile.chunk.00 and myfile.chunk.01)
/home/brianly/output-04 (contains 4 files...)
/home/brianly/output-06 (contains 6 files...)

請務必注意,每個目錄中的文件數量都在增加。 我需要做的是針對 output 目錄中的每個文本文件運行一個可執行文件。 該命令針對單個文件看起來像這樣:

./myexecutable -i /home/brianly/output-02/myfile.chunk.00 -o /home/brianly/output-02/myfile.chunk.00.processed

這里的-i參數是輸入文件,-o參數是output位置。

在 C# 中,我將遍歷目錄獲取每個文件夾中的文件列表,然后遍歷它們以運行命令行。 如何使用 bash 遍歷這樣的目錄結構,並根據位置和該位置中的文件使用正確的參數執行命令?

對於這種事情,我總是將findxargs一起使用:

$ find output-* -name "*.chunk.??" | xargs -I{} ./myexecutable -i {} -o {}.processed

現在,由於您的腳本一次只處理一個文件,因此如前所述,直接將-exec (或-execdir )與find一起使用也同樣有效,但我習慣使用xargs ,因為這通常在喂食時更有效一次對許多 arguments 進行操作的命令。 因此,它是隨身攜帶的非常有用的工具,因此我認為應該提及它。

就像是:

for x in `find /home/brianonly -type f`
do
./yourexecutable -i $x -o $x.processed
done

正如其他人所建議的那樣,使用find(1)

# Find all files named 'myfile.chunk.*' but NOT named 'myfile.chunk.*.processed'
# under the directory tree rooted at base-directory, and execute a command on
# them:
find base-directory -name 'output.*' '!' -name 'output.*.processed' -exec ./myexecutable -i '{}' -o '{}'.processed ';'

從提供的信息來看,這聽起來像是對您的 C# 想法的完全直截了當的翻譯。

for i in /home/brianly/output-*; do
    for j in "$i/"*.[0-9][0-9]; do
        ./myexecutable -i "$j" -o "$j.processed"
    done
done

這就是find命令的用途。

http://linux.die.net/man/1/find

使用查找和執行。 看看下面的

http://tldp.org/LDP/abs/html/moreadv.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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