我有一个包含文件的文件夹,我需要使用 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 或安全上下文。