다음은 접근 방식을 직접 수정 한 것입니다.
find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}_renamed"' \;
그러나 일치하는 파일이 많은 경우 mv
각 일치 항목에 대해 새 셸 (을 실행 )을 시작하므로 비용이 많이 듭니다 . 파일 이름에 재미있는 문자가 있으면 폭발합니다. 보다 효율적이고 안전한 접근 방식은 다음과 같습니다.
find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}_renamed
또한 이상한 이름의 파일로 작업하는 이점도 있습니다. 경우 find
지원을, 이것은 줄일 수있다
find . -type f -name 'file*' -exec mv {} {}_renamed \;
xargs
사용하지 않을 경우 버전에 유용 {}
같이,
find .... -print0 | xargs --null rm
여기 rm
에서 한 번 (또는 여러 파일로 여러 번) 호출되지만 모든 파일에 대해 호출되는 것은 아닙니다.
나는 제거 basename
아마 잘못 때문에 당신의이 질문 : 당신은 이동 것 foo/bar/file8
까지 file8_renamed
하지 foo/bar/file8_renamed
.
편집 (의견에서 제안한대로) :
find
없이 단축 추가xargs
- 보안 스티커 추가
x
쓸모없는 경우 :find . -type f -name 'file*' -exec mv {} "{}_renamed" \;
xargs
버전은 첫 번째 예제와 같은 효율을 갖습니다