현재 디렉터리에서 다른 디렉터리로 파일을 이동하려고 합니다. 내가 겪고 있는 문제는 이름에 특수 문자 가 있는 파일이 여러 개 있다는 것입니다 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 globstar
bash
shopt -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 {} +