我正在嘗試撰寫一個簡單的Bash回圈來連接目錄中所有檔案的前10 個位元組。到目前為止,我有代碼塊:
for filename in /content/*.bin;
do
cat -- (`head --bytes 10 $filename`) > "file$i.combined"
done
但是,這里的語法顯然不正確。我知道內部命令:
head --bytes 10 $filename
...回傳我需要的東西;傳遞的檔案名的前 10 個位元組。當我使用時:
cat -- $filename > "file$i.combined"
...代碼有效,只是它連接了整個檔案內容。
如何組合這兩個函式,以便我的回圈連接所有回圈檔案的前 10 個位元組?
uj5u.com熱心網友回復:
回圈將為您進行連接(或者更確切地說,順序執行的輸出head被寫入回圈本身的標準輸出);你不需要使用cat.
for filename in /content/*.bin; do
head --bytes 10 "$filename"
done > "file$i.combined"
uj5u.com熱心網友回復:
您應該使用@chepner 的答案,但要展示您如何使用cat...
在這里,我們有一個遞回函式,它將所有內容匯總為cat.
catHeads() {
local first="$1"; shift || return
case $# in
0) head --bytes 10 "$first" ;;
1) cat <(head --bytes 10 "$first") <(head --bytes 10 "$1");;
*) cat <(head --bytes 10 "$first") <(catHeads "$@");;
esac
}
catHeads /content/*.bin >"file$i.combined"
永遠不要真的這樣做。改用chepner的答案。
uj5u.com熱心網友回復:
head來自 GNU coreutils :
head -qc 10 /content/*.bin > combined
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/524793.html
標籤:重击for循环级联
下一篇:回圈比較檔案名中的數字
