我刚刚迁移到Octopress。在迁移过程中,插件从WordPress下载了大量未使用的图像,现在我正在尝试删除它。
我想列出所有图片并搜索_post
文件夹中的所有文件,并将所有未使用的文件提供给我,以便删除它们。
我想出了这个命令。
find ./ -type f | xargs basename | xargs grep -r {} ../_posts/
我不认为这是正确的。它给了我这个结果。
grep: Screenshot-2015-07-30-13.04.35.png: No such file or directory
grep: Screenshot-2015-07-30-13.05.41-150x116.png: No such file or directory
grep: Screenshot-2015-07-30-13.05.41.png: No such file or directory
grep: Screenshot-2015-07-30-13.06.33-150x150.png: No such file or directory
grep: Screenshot-2015-07-30-13.06.33-231x300.png: No such file or directory
grep: Screenshot-2015-07-30-13.06.33-518x500.png: No such file or directory
grep: Screenshot-2015-07-30-13.06.33-518x592.png: No such file or directory
grep: Screenshot-2015-07-30-13.06.33.png: No such file or directory
grep: Screenshot-2015-07-30-13.07.47-1024x601.png: No such file or directory
grep: Screenshot-2015-07-30-13.07.47-1120x500.png: No such file or directory
grep: Screenshot-2015-07-30-13.07.47-150x150.png: No such file or directory
grep: Screenshot-2015-07-30-13.07.47-300x176.png: No such file or directory
grep: Screenshot-2015-07-30-13.07.47-786x592.png: No such file or directory
grep: Screenshot-2015-07-30-13.07.47.png: No such file or directory
因为即使正在使用的文件仍然列出。
答案 0 :(得分:1)
那是因为你并没有限制xargs
有多少行
find ./ -type f | xargs basename | xargs grep -r {} ../_posts/
xargs会用很多字符串生成grep,你会得到
grep -r foo bar baz qux ../_posts/
由于grep只想要一个模式,所以其余的都假定为文件名。
快速解决方法是
find ./ -type f | xargs -L 1 basename | xargs -L 1 grep -r {} ../_posts/
我会在没有xargs的情况下重写:
find ./ -type f -printf "%f\n" | grep -rFf - ../_posts/
这样,您可以获得一次查找呼叫和一次grep呼叫。应该快得多。
由于grep -f -
不起作用,更复杂的bash进程替换(请参阅bash手册页)
grep -rFf <(find ./ -type f -exec basename '{}' \;) ../_posts/
这会将find
输出转换为grep
可以使用-f
选项读取的文件。