Перебрать файлы в папке

Перебрать файлы в папке

У меня есть папка с файлами, и мне нужно перебрать их с помощью команды 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бесполезная трата процессора, уберите ее. Отправьте вывод во временный файл, а затем переименуйте этот файл обратно:

tr x y < input > input.tmp && mv input.tmp input

После moreutilsустановки это можно сделать с помощью sponge(которая выполняет работу с временными файлами за кулисами):

tr x y < input | sponge input

Обратите внимание, что такие переименования могут разрушить сложные списки контроля доступа (ACL) или контексты безопасности, установленные для теперь уже надежно открепленного исходного inputфайла.

Связанный контент