如何在目录中的文件上运行命令以在要访问的每个目录中(Bash)递归创建新文件?

时间:2019-06-27 11:40:49

标签: linux bash shell unix grep

我有一个包含几个子目录的目录。

.
├── 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 个答案:

答案 0 :(得分:1)

您不能使用xarg,因为所有值都馈给单个grep。 最好遍历find的每一行(文件名):

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