Я не уверен, что у Вас может быть канал внутри -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
появляется где угодно кроме конца имени файла, он не изменяется.
Поскольку это что ls
команда должна сделать. Ваш сценарий эффективно работает
ls -al . *.pdf
И это перечислит все файлы в текущем каталоге (как указано .
). Не учтите точку, и у Вас будет просто PDFs.