Добавление префиксов/суффиксов к именам файлов, не заменяя все это вводом с клавиатуры снова?

chmod --reference=first-dir second-dir
3
01.11.2013, 02:10
3 ответа

Я всегда люблю расширение удара за это:

ls
name-with-stuff-i-dont-want-to-type

mv name-with-stuff-i-dont-want-to-type{,_old}

ls
name-with-stuff-i-dont-want-to-type_old

Это эквивалентно:

mv name-with-stuff-i-dont-want-to-type name-with-stuff-i-dont-want-to-type_old

Для добавления префикса:

ls
name-with-stuff-i-dont-want-to-type

mv {,new_}name-with-stuff-i-dont-want-to-type

ls
new_name-with-stuff-i-dont-want-to-type

Для легкого переименования файла:

ls
fileFOOname

mv file{FOO,BAR}name

ls
fileBARname
5
27.01.2020, 21:13
  • 1
    Хороший! Действительно ли возможно сделать что-то вроде этого при изменении некоторых символов, как name кому: newname? –  ryanjdillon 29.10.2013, 22:16
  • 2
    @shootingstars я обновил ответ, чтобы показать, как изменить текст посреди файла также. –  BriGuy 31.10.2013, 22:43

Если существует больше чем одно соответствие файла name* затем $tmp содержит все эти имена, разделенные пробелами. Обработка $tmp как массив вместо этого и воздействуют на каждый элемент в нем:

for file in $tmp; do 
    mv "$file" "new_$file"
done

Используйте двойные кавычки, чтобы не разделять имена, содержащие whitepace на несколько имен.

0
27.01.2020, 21:13
  • 1
    Нет никакого globbing в точке tmp=name*, так $tmp содержит name* (с дословной звездой). Это при вызове mv $tmp (с неупомянутым $tmp) то, что расширение происходит. В Вашем примере расширение происходит в for оператор. На самом деле лучше записать for file in name*; do ... если Вы не хотите использовать массив в качестве в: tmp=( name* ); for file in "${tmp[@]}"; do ... –  gniourf_gniourf 29.10.2013, 20:07

С zsh, это обычно, что Вы используете zmv для:

autoload zmv # in ~/.zshrc
zmv 'name*' 'tmp_$f'
2
27.01.2020, 21:13
  • 1
    я означал испытывать zsh. другое серьезное основание испытать его. спасибо –  ryanjdillon 31.10.2013, 01:05

Теги

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