
我有一個包含文件的資料夾,我需要使用 unix 命令“tr”迭代它們,其輸出與之前的名稱相同(如果可能)(下面的程式碼不起作用):
FILES=/root/Desktop/prova/*
for f in $FILES ; do
echo "Processing $f file..."
cat $f | tr "\n" "," > $f.tmp & mv $f.tmp $f
done
我不明白如何使用此命令cat "$f" | tr "\n" "," > "$f"
並重定向每個文件的輸出。然後我應該使用另一個 for 迴圈來建立 N 個工具命令並一起運行。您對循環研究有什麼建議嗎?
答案1
這cat
是對 CPU 的無用浪費,消除它。將輸出傳送到臨時文件,然後將該文件重新命名回來:
tr x y < input > input.tmp && mv input.tmp input
安裝後moreutils
,可以透過以下方式完成sponge
(在幕後處理臨時檔案):
tr x y < input | sponge input
請注意,此類重命名可能會破壞在現在完全未連結的原始input
檔案上設定的精美 ACL 或安全上下文。