Почему этот сценарий показывает все файлы в каталоге и не только файлы PDF?

Я не уверен, что у Вас может быть канал внутри -exec. find -exec echo {} \| sed s/tiff/jpg \; кажется, не работает.

Если думают, что Ваш наилучший вариант состоит в том, чтобы сделать сценарий, чтобы сделать преобразование, например.

convert_tiff_to_jpg:

#!/bin/bash
echo "Processing $1"
convert "$1" "${1/%tiff/jpg}"

и назовите это использованием find -exec как Вы предназначил:

find ./out -regex ".*_p[bg]_.*tiff" -exec convert_tiff_to_jpg {} \;

Существует несколько способов сделать это использование find -print0 | xargs -0, но они все довольно ужасны:

find ./out -regex ".*_p[bg]_.*tiff" -print0 |
while IFS= read -d $'\0' -r filename; do
    echo "Processing $filename"
    convert "$filename" "$(echo "$filename" | sed 's/tiff$/jpg/')"
done

или

find ./out -regex ".*_p[bg]_.*tiff" -print0 |
while IFS= read -d $'\0' -r filename; do
    echo "Processing $filename"
    convert "$filename" "${filename/%tiff/jpg}"
done

или

find ./out -regex ".*_p[bg]_.*tiff" -print0 |
    xargs -0 -I FILE bash -c 'F="FILE"; echo "$F" "${F/%tiff/jpg}"'

Обратите внимание, что я изменился s/tiff/jpg кому: s/tiff$/jpg так, чтобы, если tiff появляется где угодно кроме конца имени файла, он не изменяется.

-2
22.12.2011, 01:48
1 ответ

Поскольку это что ls команда должна сделать. Ваш сценарий эффективно работает

ls -al . *.pdf

И это перечислит все файлы в текущем каталоге (как указано .). Не учтите точку, и у Вас будет просто PDFs.

10
28.01.2020, 05:14

Теги

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