Переименуйте на перемещении с заполнителем / подстановочный знак

Позволяет говорят, что у меня есть следующие файлы

/home/user/test1.java
/home/user/test2.java
/home/user/test3.java
/home/user/test1.java.orig
/home/user/test2.java.orig
/home/user/test3.java.orig

Я хочу перезапись файлы без .orig расширение с теми файлами, имеющими его, например, /home/user/test1.java.orig -> /home/user/test1.java и так далее.

Есть ли некоторая команда как следующее?

mv /home/user/*.orig /home/user/*

где я могу использовать заполнителя из источника в целевом определении и где я могу указать, что хочу перезаписать?

0
задан 18 February 2016 в 12:07

2 ответа

for file in /home/usr/* ; do mv "$file" "${file//.orig/}" ; done

Должен добиться цели для Вас, это циклично выполняется через все файлы (и каталоги) в/home/user при помощи расширения шарика и заменяет любой экземпляр строки .orig ни с чем, поэтому удаляет его.

Это должно быть прекрасным, пока у Вас нет подкаталогов с .orig на их имя. Это даст Вам некоторые сообщения об ошибках, которые не являются очень важными, но могут быть раздражающими. Чтобы только работать над файлами, которые имеют .orig расширение, можно вставить условную проверку, имеет ли файл нежелательное расширение:

for file in /home/user/* ; do [[ $file = *.orig ]] && mv "$file" "${file//.orig/}" ; done
2
ответ дан 24 July 2019 в 10:46
for file in $(find /home/user/* -name "*.orig") ; do mv $file ${file//.orig/} ; done

Это только переместит файлы с данным расширением и также работает рекурсивно через подкаталоги.

, Если рекурсия должна быть выключена, на, может добавить -maxdepth 1 к команде находки.

1
ответ дан 24 July 2019 в 10:46

Другие вопросы по тегам:

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