Это скрипт на bash, он копирует файлы из одного каталога в другой, но в подкаталоге могут быть дубликаты. Поэтому при копировании он должен распознавать, имеет ли другой файл такое же имя, и если да, - изменять имя копируемого файла. Я пробовал это

for i in $1; do
    find $i -type f -name img*.jpg -exec cp {} $2 \;
    for j in $2; do
        find $j -type f -name $i | while read filename; do if test "$i"="$j"; then mv $i new_filename; fi done
    done
done 

но я получаю сообщение об ошибке, в котором говорится, что имя файла не должно содержать косых черт, что немного странно ... я новичок, пожалуйста, прокомментируйте, если вы добавили какой-либо код. Благодарю.

1 ответ1

0

Ваш $1 должен быть списком каталогов, потому что это первый параметр после поиска. ОК?
В первой находке вы должны указать звездочку: -name 'img*.jpg'
Затем вы копируете в каталог $2 . Таким образом, $2 в вашем втором для является каталогом, и только один.
Если вы хотите просмотреть каждый файл в $2 , используйте for j in $2/* А затем find $2 -type f -name $i | while ...
Кстати, если есть вероятность, что имена могут содержать пробелы, используйте двойные кавычки вокруг параметров.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .