Я пытаюсь найти файлы JPG в дереве папок, чтобы выполнить команду "", чтобы преобразовать его в PDF.
Проблема в том, что код, который я запускаю, оставляет файл в той же директории, и я хочу переместить его, но сохранить структуру дерева файлов.
Что я пробовал до сих пор:
find . -iname '*.jpg' -exec mogrify -format pdf '{}' \;
Эта команда работает отлично. Я хочу манипулировать "{}", перемещая часть его содержимого;
{} = ./1/aa.xxx
и я хочу преобразовать его в:
{} = ./new/1/aa.pdf
благодаря @ mpez0 я могу немного измениться и получить решение:
find . -iname '*.jpg' | while read file ; do
oldfile=${file##*/};
olddir=${file/"$oldfile"/""};
pdfdir=${file/'./''./PDF'};
pdfdir=${pdfdir/"$oldfile"/""};
savedir=${file/'./''./OLD'};
savedir=${savedir/"$oldfile"/""};
newfile=${oldfile/.[Jj][Pp][Gg]/.pdf};
mogrify -format pdf "$file";
mkdir -p "$pdfdir";
mkdir -p "$savedir";
mv -- "$olddir$newfile" "$pdfdir$newfile";
mv -- "$olddir$oldfile" "$savedir$oldfile";
done
то, что делает этот код:
find . -iname '*.jpg'
найти все файлы, которые заканчиваются JPG и JPG,
while read file ; do
если действие get ani file сохраняет маршрут в переменной, file
oldfile=${file##*/};
извлекает файл pat и сохраняет имя файла в переменной, oldfile
olddir=${file/"$oldfile"/""};
вынимает имя файла чтобы сохранить olddir
pdfdir=${file/'./''./PDF'};
изменения в патте ./ в ./pdf и сохранить новый пат в pdfdir
pdfdir=${pdfdir/"$oldfile"/""};
извлекать имя файла, чтобы сохранить pdfdir
savedir=${file/'./''./OLD'};
изменения в патте в PDF ./ в ./old и сохранить новый пат в savedir
savedir=${savedir/"$oldfile"/""};
вынуть имя файл для сохранения патта pdf в файле savedir
newfile=${oldfile/.[Jj][Pp][Gg]/.pdf};
сохранить имя нового файла, который будет создан при newfile
mogrify -format pdf "$file";
конвертации в file
pdf
mkdir -p "$pdfdir";
создать каталоги патта pdfdir
mkdir -p "$savedir";
создать каталоги патта savedir
mv -- "$olddir$newfile" "$pdfdir$newfile";
переместить новый файл pdf создать в каталог pdf
mv -- "$olddir$oldfile" "$savedir$oldfile";
переместить старый файл jpg в старый каталог и
done
завершить процесс
Я надеюсь, что это поможет другим
источник
Ответы:
Конечно, я рекомендую запускать скрипт вторя
mogrify
иmv
команду. Еслиmogrify
предлагает вариант вывода, используйте его вместо mv. Возможно, вам будет проще найти и выполнить всеmogrify
преобразования, а затем собрать новые файлы .pdf.источник
Если вы используете
convert
вместоmogrify
(часть того же набора), ваша команда становится:В отличие от
mogrify
,convert
использование не создает обновленное расширение файла, так что вы получите.jpg.pdf
(плюс капитализация) в качестве нового расширения файла, но это легко изменить сrename
:После этого вы можете удалить JPEG-файлы, если вам не нужно их сохранять (надеюсь, вам не нужна эта команда по буквам).
источник
find . -type d -exec mkdir new/'{}' \;
. Обратите внимание, что это создаст каталоги, даже если в нем нет файла JPEG. Это должно быть намного сложнее, но вы всегда можете удалить пустые каталоги с помощьюfind new/ -type d -exec rmdir '{}' \;
.