如何递归查找文件,连接成一个文件并同时删除原始文件

如何递归查找文件,连接成一个文件并同时删除原始文件

据我了解,我可以使用

find . -name '*.txt' -exec cat {} \; > all.txt

将目录中的所有文本文件(递归地遍历子目录)连接到名为all.txt.问题是,我没有足够的存储空间来all.txt存储原始文件。有没有一种方法可以一个接一个地执行两个命令,以便我可以在将原始文件与 串联后删除它all.txt

答案1

我认为最通用的方法是构建一个简单的单行 shell 命令发送到find

find . -name "*.txt" -exec sh -c 'cat {} >> foobar && rm {}'

附注:您的 glob*.txt与您的输出文件all.txt.如果您附加的文件(在我的例子中)与您的全局foobar不匹配,您将避免出现边缘情况。稍后-name重命名即可foobar

相关内容