폴더가 있다고 가정해 보겠습니다.
/
/a.bub
/v.bub
/dr.bub
/catpictures
/catpictures/or.bub
/catpictures/on.bub
각각을 .aaa
.
잘못된 접근 방식인 것처럼 보이지만 내가 얻은 결과는 다음과 같습니다.
find -type f -name "*.bub" -print0 -exec mv
답변1
가장 쉬운 방법은 bash 자체를 사용하는 것입니다.
for f in *.bub; do mv "$f" "${f/.bub/.aaa}"; done
@ZeroPiraeus와 @HaukeLaging이 올바르게 지적했듯이 이는 재귀적이지 않습니다. 활성화하여 재귀적으로 만들 수 있습니다.globstar
옵션:
shopt -s globstar
for f in **/*.bub; do mv "$f" "${f/.bub/.aaa}"; done
이전 버전의 bash의 경우 다음을 사용하십시오 find
.
find -type f -name "*.bub" | while read f; do
mv "$f" "${f/.bub/.aaa}";
done
답변2
find
다음 을 사용할 수 있습니다 xargs
.
$ find some_folder -type f -name "*.bub" |
sed "s/\.bub$//" |
xargs -I% mv -iv %.bub %.aaa
`some_folder/a.bub' -> `some_folder/a.aaa'
`some_folder/v.bub' -> `some_folder/v.aaa'
`some_folder/dr.bub' -> `some_folder/dr.aaa'
`some_folder/catpictures/or.bub' -> `some_folder/catpictures/or.aaa'
`some_folder/catpictures/on.bub' -> `some_folder/catpictures/on.aaa'
...이를 bash 함수로 일반화할 수 있습니다.
$ extmv () {
find "${1}" -type f -name "*.${2}" |
sed "s/\.${2}$//" |
xargs -I% mv -iv "%.${2}" "%.${3}"
}
...다음과 같이 사용할 수 있습니다.
$ extmv some_folder/ bub aaa