rsync - перемещение каждого файла JPG / jpg с одного жесткого диска в отдельный каталог с помощью сценария оболочки

С помощью zsh :

print -rl mydir/**/*.A(.e_'REPLY=$REPLY:r; [[ -f $REPLY.B ]]'_)

: r удаляет расширение, поэтому, если содержимое $ REPLY было mydir / somedir / somefile.A ] после выполнения REPLY = $ REPLY: r его содержимое становится mydir / somedir / somefile ;
остальное похоже на этот ответ .

2
16.12.2017, 23:44
1 ответ

Вам не нужно заключать в кавычки каждый элемент пути.

В текстовом файле со списком путей кавычек лучше не будет просто имена файлов как они есть:

/media/tfrd/Disk06_01_M/Disk02_01_X/x_images and camera/vernon pics_other/office_PBWT4_YBP6D-7wmff_bpwg4_2vgby/office pro disk 2/BCM/Program Files/Microsoft Small Business/Business Contact Manager/SDKComponents/PPCRL/
/media/tfrd/Disk06_01_M/Disk02_01_X/x_images and camera/vernon pics_other/office_PBWT4_YBP6D-7wmff_bpwg4_2vgby/office pro disk 2/SBA/program files/Microsoft Small Business/Office Accounting 2008/SDKComponents/PPCRL/

А затем напишите вот такой скрипт:

#!/bin/bash
file="/home/tfrd/Desktop/filesync/rsync/test_data_01.txt"

while IFS=$'\n' read -r line
do
    rsync --protect-args --include '*.jpg' --include '*.JPG' --exclude '*/*/.' --prune-empty-dirs "$line" /home/rsync/dir2
done < "$file"

Вот именно. Обратите внимание, что $lineзаключен в "..."при использовании в качестве аргумента пути для rsync. Это обеспечит правильную обработку любых встроенных пробелов и других специальных символов. Все содержимое внутри "..."рассматривается как одно значение, вот почему это работает.

1
27.01.2020, 22:18

Теги

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