Позволяет говорят, что у меня есть следующие файлы
/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/*
где я могу использовать заполнителя из источника в целевом определении и где я могу указать, что хочу перезаписать?
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
for file in $(find /home/user/* -name "*.orig") ; do mv $file ${file//.orig/} ; done
Это только переместит файлы с данным расширением и также работает рекурсивно через подкаталоги.
, Если рекурсия должна быть выключена, на, может добавить -maxdepth 1
к команде находки.