Tom*_* M. 5 xargs filter conversion
随着时间的推移,我一次又一次地遇到相同的模式:我有某种目录结构:
example/
??? a
? ??? c
? ??? d.txt (120k)
? ??? e.txt (60k)
??? b
??? f.txt (280k)
Run Code Online (Sandbox Code Playgroud)
我想将文件“复制”到另一个目录,例如,example_grepped对每个目录应用一个命令,就像代替cp-grep ERROR比如说,我最终得到一个具有相同结构的文件夹,但文件通过grep.
example_grepped/
??? a
? ??? c
? ??? d.txt (1k)
? ??? e.txt (0b)
??? b
??? f.txt (12k)
Run Code Online (Sandbox Code Playgroud)
用于转换媒体文件(FLAC 到 MP3,PNG 到 JPG)的相同模式,这一次在作为构建过程的一部分转换不同的模式格式时。
有我可以使用的通用命令吗?像foobar example example_grepped --command 'grep ERROR'或foobar flacs mp3s --command 'ffmpeg -i {} {}.mp3'?
xargs也许是一面不起眼的旗帜?(一find管道通过xargs将几乎足够了,但如果不是所有的命令期望的目录结构已经存在。)
我可以找到的最接近的答案,无需单独重新创建目录结构,就是使用install:
cd example
find . -type f -exec sh -c 'grep ERROR {} | install -D /dev/stdin /tmp/example_grepped/{}' \;
Run Code Online (Sandbox Code Playgroud)
不幸的是,只有当您的命令可以将其结果抛出到 STDOUT 时,上述内容才有效。