Linux

從管道輸入列印不存在的文件

  • November 9, 2016

我有很多文件的.PDF目錄.JPG

.JPG每個都應該有一個.PDF同名的文件。

我正在嘗試使用命令來查找.PDF沒有文件的.JPG文件。

我目前的命令是:

find -iname '*.jpg' -print0|sed 's/jpg$/pdf$/ig' |xargs -0 ls

這會為不存在的文件列印: No such file or directory錯誤;

問題是ls無法由grepor處理的錯誤sed

這些中的任何一個都可以解決我的問題:

  • 如何ls僅列出不存在的文件?
  • 如何處理/過濾lswith sed/的錯誤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 {} +

引用自:https://unix.stackexchange.com/questions/59514