Linux 시스템에는 다음 명명법을 사용하는 수백만 개의 파일이 있습니다.
1559704165_a1ac6f55fef555ee.jpg
처음 10자리는 타임스탬프이고 다음 10자리 _
는 특정 ID입니다. 특정 파일 이름 ID와 일치하는 모든 파일을 다른 폴더로 이동하고 싶습니다.
파일이 포함된 디렉토리에서 이것을 시도했습니다.
find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"
하지만 오류 메시지가 나타납니다.
bash 1559704165_a1ac6f55fef555ee.jpg: command not found
시도하면 mv ??????????_a1ac*.jpg
인수 목록이 너무 길다는 오류가 발생합니다. 적어도 15개의 서로 다른 파일 이름 패턴이 있습니다. 어떻게 이동합니까?
답변1
다음을 사용해야 합니다.
find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' \
-exec mv -t destination "{}" +
즉, maxdepth 1
하위 디렉터리가 없는 현재 디렉터리에서 검색하고 있음을 의미합니다.
type f
파일 검색만을 나타냅니다.
name '??????????_a1ac*.jpg'
검색 중인 파일과 일치하는 패턴입니다.
mv -t destination "{}" +
일치하는 파일을 대상으로 이동함을 나타냅니다. 여기서 +
일치하는 새 파일이 이전 파일에 추가됩니다. 예를 들면 다음과 같습니다.
mv -t dest a b c d
여기서 abcd는 다른 파일입니다.
답변2
주문,
find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"
모든 파일 목록을 모든 파일로 파이프하세요!
find . -maxdepth 1 -type f -name `*_a1ac*.jpg` -print0 |\
xargs -0 -r mv -t "/home/ubuntu/ntest"
작동합니다.
답변3
당신은 매우 가깝습니다. 이 -name
옵션을 사용해야 합니다 find
. 그리고 패턴을 인용하는 것을 잊지 마세요.
그래서
find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' |xargs mv -t "/home/ubuntu/ntest"
답변4
mv
동일한 호스트 시스템 ( 사용 중인 것으로 추측됨)에서 파일을 이동하려는 경우 rsync
더 빠른 옵션일 수 있습니다.
rsync -av --inplace -W /source/??????????_a1ac*.jpg /home/ubuntu/ntest/
--inplace
-W
프로세스 속도를 높일 준비를 하세요 .
이것이 또 다른 것을 만들어 낼 것인가?매개변수 목록이 너무 깁니다. 오류그런 다음 목록을 피드에 제공할 수 있습니다.rsync
예를 들어, 목록을 만들려면 find를 사용하세요.
find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' > /tmp/my_image_list.txt
그리고 그것을 줘rsync
rsync -av --inplace -W --files-from=/tmp/my_image_list.txt /path/to/files /home/ubuntu/ntest/
여기서 출처는 귀하가 제공하는 목록이 귀하의 출처와 관련된 것으로 간주되기 /path/to/files
때문 입니다.rsync
주요 사항은 다음과 같습니다.rsync
mv
파일이 동일한 파일 시스템에 없으면 더 빠릅니다..