команда оболочки Linux mv много файлов

#linux #shell #mv

#linux #оболочка #mv

Вопрос:

У меня есть много файлов, таких как 1a1, 2a2, 3a3, и я хочу преобразовать имена файлов в 1b1, 2b2, 3b3. Это означает замену ‘a’ на ‘b’ в этих именах файлов.

Я попробовал команду, подобную:

 for f in */*; do
  mv "$f" "${f/a/b}"
done
ls | xargs -i mv {} ${{}/a/b}  
ls | xargs -i mv {} `echo {}|tr -t 'a' 'b'`
  

но ни один из них не работает.
Я знаю команду
переименовать ‘a’ в ‘b’ *
может работать.

Но я все еще хочу выяснить, как использовать for , xargs связанные с other cmds для выполнения этой работы. В конце концов, в повседневном использовании они гораздо более общие, чем простые rename команды.

Пожалуйста, помогите мне, спасибо.

Комментарии:

1. Это ровно 3 символа? или a может быть в любом положении?

2. Для начала « не является допустимым разделителем путей, и вам нужно заключить ваши переменные в кавычки.

3. да, я их исправил.

Ответ №1:

 #!/bin/bash
for old in *
do new=$(echo "$old" | sed -e 's/a/b/')
   echo mv "$old" "$new" amp;>2
   mv "$old" "$new"
done
  

Этот пример позволит вам угадать более сложные преобразования имен, когда вы узнаете, как использовать sed(1) команду для выполнения преобразований имен.

Программа передает все параметры командной строки в цикл for, в каждом цикле программа получает новую переменную new с преобразованием исходного $old имени. Затем вам нужно только выполнить команду со старым и новым значениями.

Ответ №2:

На всякий случай, если вы хотите знать, с переименованием:

 rename 's/(.*)a(.*)/$1b$2/' *
  

Комментарии:

1. Проблема с rename заключается в том, что существует несколько разных версий, каждая из которых имеет довольно различный, иногда ограниченный набор функций.