Не знаете, какую оболочку вы используете ... предполагая, что bash shell
let line=0
for item in $(cat file2)
do
line+=1
grep $item file1 > /dev/null 2>&1
[ $? -ne 0 ] && echo -n "${line},"
done
Не могли бы вы просто использовать:
[ -e *.PDF ]
вместо
[ [ -n $(echo *.PDF) ] ]
, например.
[ -e *.PDF ] && echo 'yes'
shopt -s nullglob
set -- Task1/*.PDF
if (( $# > 0 )); then
printf 'There are %d PDF files in "Task1"\n' "$#"
else
echo 'There are no PDF files in "Task1"'
fi
Набор
установит позиционные параметры для имен отдельных файлов PDF, доступных в подкаталоге Task1
. Это то же самое, как если бы вы вызвали сценарий с ./ script Task1 / *. PDF
.
Количество позиционных аргументов содержится в $ #
, и мы проверяем, больше ли оно нуля. Если это так, мы сообщаем количество доступных PDF-файлов. В противном случае мы сообщаем, что их нет. Вы можете делать все, что хотите, вместо этих двух действий.
Если задача состоит в том, чтобы просто ввести суффикс .PDF
в нижний регистр любого такого файла, то нет необходимости сначала проверять, есть ли они:
shopt -s nullglob
for fpath in Task1/*.PDF; do
mv "$fpath" "${fpath%.PDF}.pdf"
done
Установка оболочки nullglob
опция гарантирует, что мы не получим значение *
в fname
, если не было никаких файлов, соответствующих шаблону.