[bash] 모든 파일에 재귀 적으로 파일 확장자 추가

파일 확장자가없는 파일을 포함하는 몇 개의 디렉토리와 하위 디렉토리가 있습니다. .jpg이 디렉토리에 포함 된 모든 파일 에 추가하고 싶습니다 . 파일 확장자를 변경하는 bash 스크립트를 보았지만 단순히 추가하는 것은 아닙니다. 또한 재귀 적이어야합니다. 누군가 도와 주시겠습니까?



답변

명시 적 루프가없는 대체 명령 ( man find) :

find . -type f -exec mv '{}' '{}'.jpg \;

설명 : 이것은 -type f현재 디렉토리 ( .) 에서 시작하는 모든 파일 ( )을 재귀 적으로 찾고 mv각각에 이동 명령 ( )을 적용 합니다. 또한 따옴표 주위 {}에 공백이있는 파일 이름 (및 개행 문자까지도 …)이 제대로 처리되도록합니다.


답변

확장자가없는 파일을 찾아 .jpg를 추가합니다.

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;


답변

이것은 조금 늦었지만 지금까지의 것보다 더 나은 솔루션 (가독성이 떨어질지라도)을 추가 할 것이라고 생각했습니다.

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

find | xargs패턴을 사용하면 일반적으로 각 파일에 대해 새 프로세스를 분기 할 필요가 없으므로보다 효율적인 실행이 가능합니다.

이를 위해서는 기존의 이름 변경이 아닌 데비안 기반 배포판 (일명 prename)에있는 이름 변경 버전이 필요합니다. 그러나 이것은 작은 펄 스크립트 일 뿐이므로 모든 시스템에서 위의 명령을 사용하는 것이 충분히 쉬울 것입니다.


답변

이렇게

for f in $(find . -type f); do mv $f ${f}.jpg; done

공백으로 구분 된 파일 이름이있을 것으로 예상하지 않습니다.
그렇다면 이름을 약간 처리해야합니다.

다른 디렉토리에서 명령을 실행
하려면 find .find /target/directory.


답변

Windows 기본에서 확장자가없는 모든 파일의 이름을 변경하려면 다음을 수행 할 수 있습니다 ren * *.jpg
. 파일이 확장자가 없으므로 *를 사용하거나 png를 jpg로 변경하려면ren *.png *.jpg


답변

rename

확장명이없는 파일의 이름을 바꿀 수 있는지 확실하지 않습니다 (지금 Windows 7을 사용 중입니다)


답변