문제

파일 확장자가없는 파일이 포함 된 몇 가지 디렉토리와 하위 디렉토리가 있습니다. 추가하고 싶습니다 .jpg 이 디렉토리에 포함 된 모든 파일에 파일 확장 스크립트를 변경하기위한 Bash 스크립트를 보았지만 단지 파일을 추가하는 것은 아닙니다. 또한 재귀가 필요합니다. 누군가 도와 줄 수 있습니까?

도움이 되었습니까?

해결책

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

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

설명 : 이것은 모든 파일을 재귀 적으로 찾습니다 (-type f) 현재 디렉토리에서 시작 (.) 및 Move Command (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 패턴은 일반적으로 각 파일에 대한 새 프로세스를 포크 할 필요가 없으므로보다 효율적인 실행을 초래합니다.

이를 위해서는 전통적인 이름의 이름이 아닌 데비안 맛 배포 (일명 프렌 이름)에있는 이름의 이름이 필요합니다. 그러나 그것은 단지 작은 Perl 스크립트 일 뿐이므로 모든 시스템에서 위의 명령을 사용하는 것이 쉽습니다.

이와 같이,

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에 있습니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top