bash를 사용하여 확장자가없는 파일에 파일 확장자 ".jpg"를 추가하는 좋은 방법은 무엇입니까?
bash를 사용하여 확장자가없는 파일에 파일 확장자 ".jpg"를 추가하는 좋은 방법은 무엇입니까?
답변:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done
"${f%.jpg}"
로 bash 쉘 문자열 조작입니다. `$ {string % substring}`$ string 뒤에서 $ substring의 가장 짧은 일치를 삭제합니다.
.jpg
내용이 일반 파일에도 추가된다는 점에 유의하십시오 .
이름 바꾸기를 사용할 수 있습니다.
rename 's/(.*)/$1.jpg/' *
rename from to file...
또 다른 방법-루프없이
find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep 'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg
고장:
위의 명령은 드라 이런을 위한 것이므로 mv 전에 "echo"를 제거해야합니다.
편집 여기에 "따옴표로 경로 인수를 줄 바꿈; 공백이있는 경로에서 인수 분할을 방지" 가 필요하다고 제안하는 사람들이 있습니다 .
일반적으로이 권장 사항은 사실이지만이 경우에는 그렇지 않습니다. 여기서이 때문에 %
대체되었다되어 있지 쉘 확장이 아니라하여 xargs
(가), 그래서 내부 (직접) %
에도 파일명에 공백이 올바르게 치환한다.
간단한 데모 :
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b' 'c d'
$ find . -type f -print
./c d
./a b
# notice, here are spaces in the above paths
#the actual xargs mv WITHOUT quotes
$ find . -type f -print | xargs -I % mv % %.ext
$ find . -type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
제 경우에는 파일 유형을 인식하지 못했기 때문에 파일 명령 의 도움으로 mv 명령을 사용 하여 파일 유형을 검사하고 찾을 수 있습니다. 이 솔루션은 파일 명령이 파일 유형을 인식하지 못할 수 있기 때문에 모든 파일에 완벽하지 않을 수 있지만 대부분 저에게 효과적이었습니다.
for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f" "$f.$ext"; done
awk의 사용 은 실제로 확장 인 명령 파일 에서 반환 된 문자열의 두 번째 단어를 제거하는 것입니다.
rename --dry-run * -a ".jpg" # test
* -a ".jpg" # rename
--dry-run
그리고 -a
내 버전에서 사용할 수 없습니다 rename
. 이것이 일부 아키텍처에 특정한 경우이를 지정해야합니다.
여러 파일 이동 을 사용할 수 있습니다 . 저는이 프로젝트의 관리자입니다. 구문은 간단합니다.
mmf files*
모든 파일 이름으로 $ EDITOR를 열거 나 기본적으로 vim을 열고 vim에서 Ctrl + v + G를 사용하여 모든 파일 이름의 끝을 강조 표시하고 파일을 저장하고 종료하면 모든 파일의 이름이 바뀝니다.
mv "${file}" "${file}.jpg"
?