Вот моя проблема:
У меня есть файл с -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