이름에 'é' 'ä' 'space'와 같은 여러 특수 문자가 포함된 파일을 이동하는 방법은 무엇입니까?

이름에 'é' 'ä' 'space'와 같은 여러 특수 문자가 포함된 파일을 이동하는 방법은 무엇입니까?

현재 디렉토리에서 다른 디렉토리로 파일을 이동하려고 합니다. 내가 겪고 있는 문제는 여러 파일에 space, ü, &, (, .... 다음과 같은 명령을 사용하여 모든 파일을 어떻게 이동할 수 있습니까? ls | grep mp4 | xargs -i mv {} mp4여기서 {}는 현재 파일의 이름이고 mp4는 내 모든 파일을 저장할 대상입니다. 명령을 시도했지만 오류가 표시됩니다. 도와주실 수 있나요?

답변1

바로 이 상황이다당신은 사용하고 싶지 않아lsin. 또는 xargs기본 설정을 사용하면 입력을 공백으로 분할하고 따옴표와 백슬래시를 특별히 처리합니다. 해당 동작을 끄려면 -0null 바이트에서 입력을 분리하거나 줄바꿈(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 {} +

관련 정보