for i in *.txt; do xxd -l 3 $i >> log done
如何在bash
登錄可變我也希望記錄每個結果的文件名$i
。例如: -
file_name result_of_command
for i in *.txt; do xxd -l 3 $i >> log done
如何在bash
登錄可變我也希望記錄每個結果的文件名$i
。例如: -
file_name result_of_command
我不完全清楚你所問的,但是這是你想要的嗎?
for i in *.txt;
do
echo "$i" >> log
xxd -l 3 $i >> log
done
謝謝,我試圖把'echo'放在一個錯誤的地方。 –
你可能只需要使用printf
:
for f in *.txt; do
printf "%s: %s\n" "$f" "$(xxd -l 3 "$f")"
done >> log
謝謝,它也適用。 –
這是更好地使用find
與-exec
選項符合特定條件的每個文件運行一個命令。
如果您希望當前目錄中的所有文件匹配*.txt
,則可以使用find
。您可以使用-exec
選項爲每個文件運行命令。 {}
替換文件的名稱和\;
(轉義的;
終止命令)。您可以使用+
來告訴find用多個文件名替換{}
。
find . -type f -name '*.txt' -maxdepth 1 -exec xxd -l 3 {} \; >> log
請注意,上面的示例包含隱藏文件,您可以使用正則表達式排除它們。
find . -type f \(! -regex '.*/\..*' \) -name '*.txt' -maxdepth 1 -exec xxd -l 3 {} \; >> log
另外,如果你打算在當前目錄中的文件名替換文件,並在命令中使用它們,總是用./*
。以-
開頭的路徑可能會被您的命令解釋爲選項。
我不認爲for循環遭受這些缺陷之一。根據[this](http://www.in-ulm.de/~mascheck/various/argmax/),它實際上可以解決太多參數列表的命令;和空格的文件名被處理得很好。 –
@benjaminw我認爲你是對的。在for循環中,在IFS中的任何字符上使用文字全局模式還是循環變量總是匹配glob可能擴展到的一個完整路徑? –
它匹配完整的路徑,我會說。 –
我不知道我明白你在問什麼。你的意思是你只是想做到這一點:echo「$ i」>> log?請更清楚你在找什麼。 –
@ jeremy-gurr,是的,我想要$ i,然後是結果。 –