Если файл существует в каталоге, делать...? [дубликат]

Не знаете, какую оболочку вы используете ... предполагая, что 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
1
23.05.2017, 15:40
3 ответа
ls -1 *.PDF|xargs -l1 bash -c 'mv $0 ${0%.PDF}.pdf'
0
27.01.2020, 23:34

Не могли бы вы просто использовать:

[ -e *.PDF ]

вместо

[ [ -n $(echo *.PDF) ] ] 

, например.

[ -e *.PDF ] && echo 'yes'
0
27.01.2020, 23:34
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 , если не было никаких файлов, соответствующих шаблону.

2
27.01.2020, 23:34

Теги

Похожие вопросы