Я пытаюсь найти файлы 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
если действие получить ани файл сохранить маршрут в file
переменной
oldfile=${file##*/};
вынуть файл pat и сохранить имя файла в переменной oldfile
olddir=${file/"$oldfile"/""};
выньте имя файла для сохранения патта в olddir
pdfdir=${file/'./''./PDF'};
измените ./ на ./pdf и сохраните новый пат в pdfdir
pdfdir=${pdfdir/"$oldfile"/""};
выньте имя файла, чтобы сохранить файл pdf в pdfdir
savedir=${file/'./''./OLD'};
измените ./ на ./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 файл create в pdf каталог mv -- "$olddir$oldfile" "$savedir$oldfile";
переместить старый файл jpg в старый каталог done
завершить процесс
Я надеюсь, что это поможет другим