iso*_*mes 7 shell xargs filenames quoting
我试图只列出非图像文件,只在最近的 500 个文件中搜索。所以我跑
ls -t | head -500 | file | grep -v 'image'
这是不对的:它显示一条帮助消息。将其更改为
ls -t | head -500 | xargs file | grep -v 'image'
我现在有时会得到我想要的输出,但如果文件名中有空格在里面,例如Plutonian\ Nights\ -\ Sun\ Ra.mp3-然后xargs将运行file Plutonian,file Nights等等。
我如何帮助xargs查看空间,或者以其他方式完成我想要完成的工作?
使用xargs,可以通过以下方式完成:
find . -type f -print0 | xargs -0 file | grep -v 'image'
Run Code Online (Sandbox Code Playgroud)
但是xargs昨天就是这样。酷孩子们parallel今天使用。使用并行,它将是:
find . -type f | parallel file | grep -v 'image'
Run Code Online (Sandbox Code Playgroud)
看。不使用 -print0 和 -0。parallel本身真的很聪明。
更新
要仅列出最近的 500 个文件,您的命令将是:
ls -1t | head -500 | parallel file {} | grep -v image
Run Code Online (Sandbox Code Playgroud)
重要的
如果您的并行是旧的并且以上语法不起作用,请按照此处的说明安装新版本的并行:http : //www.gnu.org/software/parallel/parallel_tutorial.html
我有两个粗略的建议可能会有所帮助。但两者都感觉不太令人满意,所以也许会出现更好的东西。
首先,使用 sed 为所有内容添加引号,因此如果文件名中包含引号,您只会遇到麻烦
ls -t | head -500 | sed -e 's/\(.*\)/"\1"/' | xargs file | grep -v 'image'
Run Code Online (Sandbox Code Playgroud)
另一种是使用 ls 查找最近的 501 个,然后使用 find 获取较新的内容,例如
find -newer $(ls -t | head -501 | tail -1) -type f -exec file {} \; | grep -v image
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6997 次 |
| 最近记录: |