ошибка при попытке mv файла с -r в имени файла

ошибка при попытке mv файла с -r в имени файла

Вот моя проблема:

У меня есть файл с -r в имени:-r.jpg

Когда я попытался сделать, mv *.jpg old/я получил:

mv: invalid option -- 'r'

Даже для

for g in *.jpg;do echo $g &&mv "${g}" old/;done

У меня та же ошибка.

решение1

Большинство утилит командной строки имеют возможность разделенияпараметрыотаргументы.

Это предотвращает множество проблем с"особенный"имена файлов, которые выглядят как параметры.

Наиболее распространенным разделителем, указывающим конец опций, являются два дефиса --или , --что также поддерживается mv.

Другими словами:

 mv [OPTIONS] -- SOURCE DEST

или поскольку вы не указали никаких опций:

 mv -- *.jpg old/

решение2

Самым простым решением было бы добавить к имени файла описание ./относительного пути.

for g in *.jpg; do echo $g && mv "./${g}" old/; done

Также можно использовать абсолютный путь

for g in $(pwd)/*.jpg; do echo $g && mv $g old/; done

В качестве альтернативы вы можете использовать команду , findпоскольку она уже предоставляет относительный путь ( вы можете использовать , --max-depthесли хотите обработать только текущий каталог )

for g in $(find . -name "*jpg"); do mv $g old; done

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

 $ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); do find . -inum $g -print0 | xargs -0 -I '{}' mv '{}' old; done

Связанный контент