【发布时间】:2020-12-03 11:49:42
【问题描述】:
亲爱的,
我尝试在 bash 脚本中结合使用“find”和“cat”来复制子目录中数百个文件的内容:
find ./inlet3/* -type f -name 'U' -exec bash -c 'cat "{}"' \; > temp -exec bash -c 'cat temp >> "{}"' \;
查看给定的命令,我打算首先将每个“U”的内容复制到一个名为“temp”的临时文件中,该文件应该每次都在bash脚本所在的目录中创建。这部分应该通过以下方法实现:
-exec bash -c 'cat "{}"' \; > temp
“temp”的内容随后应附加到“U”,以获得具有重复内容的文件。这部分应该通过给定的方法来完成:
-exec bash -c 'cat temp >> "{}"' \;
但是,该命令没有给我想要的结果。我预计对于通过 find 找到的每个“U”,“temp”都会被覆盖。但是我看到之前找到的“U”的内容被附加到“temp”中,积累了它的内容。如果我尝试使用以下方法删除“temp”:
-exec rm -rf temp \;
然后我会收到一个错误:
cat: temp: 没有这样的文件或目录
为了简单起见,我省略了其他一些 -exec 选项。
谁能说出我可能错在哪里?我很感激任何提示。
亲切的问候。
【问题讨论】:
-
您希望
-execdir而不是-exec在与 U 相同的目录中创建临时文件。 -
不带引号的
> temp不会只是将所有输出从find发送到temp,无论您在哪里运行它?可能缓冲?我想也许你的意思是在"cat {}"
标签: bash duplicates find cat