迭代文件夹中的文件

迭代文件夹中的文件

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

相关内容