이름에 여러 특수 문자(예: "é", "ä", "space")가 포함된 파일을 이동하는 방법은 무엇입니까?

이름에 여러 특수 문자(예: "é", "ä", "space")가 포함된 파일을 이동하는 방법은 무엇입니까?

현재 디렉터리에서 다른 디렉터리로 파일을 이동하려고 합니다. 내가 겪고 있는 문제는 이름에 특수 문자 가 있는 파일이 여러 개 있다는 것입니다 space, ü, &, (, .... 배치됩니다. 명령을 시도했지만 오류가 표시됩니다. 도울 수 있니?ls | grep mp4 | xargs -i mv {} mp4{}

답변1

이것이 바로 사실이다당신은 사용하고 싶지 않아ls또는 xargs입력을 공백으로 분할하고 따옴표와 백슬래시만 처리하는 기본 설정을 사용하십시오. 이 동작을 끄려면 -0널 바이트 구분 입력 또는 개행 구분(GNU xargs) 입력을 사용해야 합니다 .-d'\n'

모든 파일이 동일한 디렉터리에 있으므로 셸을 사용할 수 있습니다.

mv *mp4* mp4/

mv *.mp4 mp4/또는 확장자가 있는 파일 만을 의미하는 경우 . mp4첫 번째는 mp4으로 이동하라는 경고를 표시합니다 mp4. )


파일이 동일한 디렉터리에 없으면 이중 별표( zsh- 기본적으로 활성화되거나 또는 와 ksh함께 활성화됨 )를 사용해야 합니다.set -o globstarbashshopt -s globstar

mv **/*mp4* mp4/

또는find

find . -type f -name "*mp*" -exec mv {} mp4/ \;

답변2

주문하다:

ls | grep mp4 | xargs -i mv {} mp4

대부분의 경우 더 간단하고 더 강력한 것으로 대체될 수 있습니다.

mv *mp4* mp4

mp4 디렉터리 내에서 이동할 수 없다는 경고는 무시해도 됩니다.

mp4귀하의 스크립트와 마찬가지로 이 스크립트는 이름에 " "가 있는 모든 파일을 이동합니다 (예: mp4list.txt, lamp4.jpg). 실제로 .mp4" " 확장자를 가진 파일 만 이동하려면 다음을 사용할 수 있습니다.

mv *.mp4 mp4

mp4이렇게 하면 디렉터리 자체에 대한 오류 메시지가 나타나는 상황을 방지할 수 있습니다.

mp4 파일 수가 많아 이전 명령이 작동하지 않는 경우 GNU를 사용하여 find동일한 목적을 달성할 수 있습니다.

find . -maxdepth 1 -name "*mp4*" -exec mv -t mp4 {} +

또는

find . -maxdepth 1 -name "*.mp4" -exec mv -t mp4 {} +

관련 정보