Linux
從管道輸入列印不存在的文件
我有很多文件的
.JPG
。
.JPG
每個都應該有一個我正在嘗試使用命令來查找
.JPG
文件。我目前的命令是:
find -iname '*.jpg' -print0|sed 's/jpg$/pdf$/ig' |xargs -0 ls
這會為不存在的文件列印
: No such file or directory
錯誤;問題是
ls
無法由grep
or處理的錯誤sed
。這些中的任何一個都可以解決我的問題:
- 如何
ls
僅列出不存在的文件?- 如何處理/過濾
ls
withsed
/的錯誤grep
?- 文件存在檢查的任何其他方式(不創建 bash 腳本文件)?
我認為您應該使用循環
IFR=$'\0' # because you use -print0 on your find for jpg_file in `find -iname '*.jpg' -print0` do pdf_file=`echo "$jpg_file" | sed 's/jpg$/pdf/i'` if [ -e "$pdf_file" ]; then echo "$pdf_file exist" else echo "$pdf_file missing" fi done
POSIXly,你可以這樣做:
find . -name '*.[jJ][pP][gG]' -exec sh -c ' for i do [ -e "${i%.*}.pdf" ] || printf "%s\n" "$i" done' sh {} +
如果您想不區分大小寫地搜尋 PDF 文件,您可以:
find . -name '*.[jJ][pP][gG]' -exec sh -c ' for i do set -- "${i%.*}".[pP][dD][fF] case $1 in (*"]") printf "%s\n" "$i" esac done' sh {} +