2016-11-08 3 views
-1

Я хочу переименовать динамические файлы, перемещая их в другой каталог. Имя файла являются:Переименуйте несколько файлов при перемещении их в другую папку с динамическими именами файлов в unix

File_{Date}_1 
File_{Date}_2 
File_{Date}_3 
File_{Date}_4 

Новые имена файлов должны быть:

File_{Date}_1.txt 
File_{Date}_2.txt 
File_{Date}_3.txt 
File_{Date}_4.txt 

Я пытался использовать мв команду, но, кажется, что не может переместить несколько файлов. Количество файлов не фиксировано, поэтому я не могу переместить каждый файл по строкам. Пожалуйста, помогите предложить.

+0

Возможно, вам придется сузить свой вопрос после просмотра некоторых других [похожих вопросов] (http://stackoverflow.com/search?q=rename+%5Bbash%5D+is%3Aq). – chepner

ответ

0

Возможно, вам удастся уйти только с помощью команд find -exec.

find /path/to/files/ -type f -exec mv {} /new/destination/ +

-exec Заменит {} с именем файлов. Уловка в конце вы завершаете команду -exec с + вместо \;. Это говорит о том, что он должен ждать выполнения команды до тех пор, пока она не расширит значение {}, на мой взгляд, ограничение ядер на аргументы.

В основном это будет делать mv f1 f2 f3 f4 f5... fN /new/destination/

Очевидно, хотя это не переименовывает файлы. Таким образом, чтобы закончить, я бы запустить

cd /new/destination/; find ./ -type f -exec mv {} {}".txt" \;

Если вы можете работать из каталога, содержащего файл по cd «ать в ней, прежде чем выполнить команду, то вы можете уйти с помощью одной команды поиска.

cd /path/to/files; find ./ -type f -printf "%P\n" -exec {} c/{}.txt \;

К сожалению, вы не можете использовать два {} с + заканчивая находке, но по-прежнему единственная команда должна работать быстрее. Надеюсь, это даст вам несколько вариантов.

1

Вы можете использовать цикл и использовать mv команды на каждом из файлов или использовать rename команды:

rename 's/$/.txt/' File_* 

(изменить выражение Глоба в зависимости от того, как файлы называется).

+0

Я получаю эту ошибку при использовании команды переименования bash: rename: command не найден – Pooja25

+0

Это означает, что у вас ее нет в вашей системе. Вместо этого вы можете использовать простой для цикла и mv. –

+0

Предполагаемые файлы находятся в текущем каталоге (в противном случае изменить цикл с помощью пути): 'для файла в File_ *; do mv "$ {file}" "{file} .txt" || {echo "error moving $ file"; выход 1; } done' –

Смежные вопросы