Хорошо, у меня есть куча файлов, начинающихся с тире, -. Что не очень хорошо ... и я хочу их переименовать. В моем конкретном случае я просто хотел бы поставить перед ними характер.
Я нашел следующую строку, которая должна работать, но из-за этого не работает:
for file in -N*.ext; do mv $file x$file; done
Если я поставлю echo
перед собой, mv
я получу кучу
mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext
Что правильно, за исключением, конечно, будет думать, что первое имя файла - это параметры. Поэтому, когда я удаляю echo
и запускаю его, я просто получаю кучу
mv: illegal option -- N
Я пытался изменить его на
for file in -N*.ext; do mv "$file" "x$file"; done
но цитаты просто игнорируются, кажется. Пытался использовать одинарные кавычки, но тогда переменная не раскрывалась ... Что мне здесь делать?
Обновление: я также попытался процитировать цитаты. Как это:
for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done
И когда я повторяю это, это выглядит правильно, но когда я на самом деле запускаю это, я просто получаю
mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory
Я просто понятия не имею, как это сделать сейчас ... вздох
Ответы:
Вам нужно использовать ключевое слово,
--
чтобы сообщить команде mv, что аргументы не должны интерпретироваться как опции. Часы:Используйте
--
после всех параметров в командной строке. Например, если вы пытаетесь использовать-i
опцию для mv , она будет идти раньше--
:источник
./
имени файла, что будет работать. Но это, конечно, еще более аккуратный вариант :)./
. но вы правы, это тоже подходит для этой ситуации.--
значение не обрабатывает дальнейшие аргументы, так как параметры являются соглашением и не соблюдаются всеми программами. Некоторые используют одиночество-
для этого, а некоторые не принимают ничего для этой цели. Поэтому./
стоит помнить о предварительном подходе .--
в качестве специального аргумента используется расширение GNU, но оно упоминается в рекомендациях POSIX. см. раздел 12.2, рекомендация 10: opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ... это означает, что вы можете ожидать, что большинство утилит POSIX и GNU будут соблюдать соглашение, а другие - нет.Другой способ - включить родительский каталог с именем файла ...
Чтобы переименовать файл '-file-to-rename' в 'file-to-rename' ...
Спасибо @Skippy le Grand Gourou. Подтвердил, что ./-file-to-rename работает с
mv
иrm
как в ...источник
./
.