Как выполнить команду для файла в каталоге, рекурсивно создавая новый файл в каждом посещаемом каталоге (Bash)? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть каталог с несколькими подкаталогами.

.
├── alembic
│   └── results.csv
├── bigdata
│   └── results.csv
├── calchipan
│   └── results.csv

Я хотел бы создать копию каждого файла results.csv в том же каталоге с именем results_cleaned.csv, где будут находиться определенные строкиудален.Известно, что каждый подкаталог содержит только один файл: results.csv.

Запуск этого в одном каталоге работает:

find . -name 'results.csv' | xargs grep -v "Pattern" > results_cleaned.csv

Однако, выполняя ту же команду в корне,производит только один results_cleaned.csv файл.Я понимаю, что должен указать, что я хочу создать файл в каждом подкаталоге отдельно, как мне это сделать?

1 Ответ

1 голос
/ 27 июня 2019

Вы не можете использовать xarg, так как все значения передаются в один grep.Было бы лучше перебрать каждую строку find (имена файлов):

find . -name 'results.csv' | while read -r f
do
    grep -v "Pattern" "$f" > "$(dirname "$f")/results_cleaned.csv"
done
...