쉘 스크립트를 사용하여 접두사와 접미사가 일치하는 파일 복사

쉘 스크립트를 사용하여 접두사와 접미사가 일치하는 파일 복사

다음 파일이 포함된 디렉터리가 있습니다.

aaaXXXbbb.png
aaaYYYccc.png
xxxAAAyyy.png
yyyAAAxxx.png

이제 쉘 스크립트를 사용하여 접두어 'aaa' 및 접미어 '.png'가 있는 모든 파일을 새 디렉토리에 복사하고 싶습니다. 2개의 파일 'aaaXXXbbb.png' 및 'aaaYYYccc.png'를 가정해 보겠습니다.

답변1

cp aaa*.png /some/destdir

이는 문자열로 시작 하고 문자열로 끝나는 aaa모든 파일 이름 과 일치하며 .png모두 디렉토리에 복사됩니다 /some/destdir. *이름 중간에 있는 모든 문자와 일치 합니다 .

이 패턴과 일치하는 파일이 수천 개 있으면 결과 목록이 너무 길어서 이 작업이 실패합니다.

이 경우 다음 루프와 같은 것을 사용하십시오.

for name in aaa*.png; do
    cp "$name" /some/destdir
done

그러면 파일이 하나씩 복사됩니다.

수천 개의 파일에 대해 보다 효율적인 접근 방식은 다음과 같습니다(GNU cp및 해당 -t옵션 사용).

find . -maxdepth 1 -type f -name 'aaa*.png' -exec cp -t /some/destdir {} +

또는 (GNU 없이 cp):

find . -maxdepth 1 -type f -name 'aaa*.png' -exec sh -c 'cp "$@" /some/destdir' sh {} +

마지막 명령은 현재 디렉토리에서 이름이 패턴과 일치하는 모든 일반 파일을 찾고 find, 이러한 파일 배치에 대해 짧은 인라인 쉘 스크립트를 호출합니다. 짧은 인라인 셸 스크립트는 현재 배치(합당하고 관리 가능한 파일 수)의 파일을 대상 디렉터리에 복사합니다.-type f-maxdepth 1aaa*.png

find사용 에 대한 추가 정보 -exec:"find"의 -exec 옵션 이해

답변2

라이너를 사용하면 다음과 같이 할 수 있습니다.

grep '^aaa.*\.png$' list.txt | xargs -I '{}' cp '{}' destination_dir/

grep줄 시작 부분에서 "aaa"를 찾고 그 뒤에 0개 이상의 문자가 오고 ".png"로 끝납니다. 그런 다음 이를 매개변수 목록으로 "destination_dir"에 cp파이프합니다 .

파일 디렉터리에 있는 경우 cp다음 명령을 사용할 수 있습니다.

cp aaa*.png destination_dir

답변3

그리고 find:

find . -maxdepth 1 -type f -name aaa\*.png -exec cp {} destination \;

.현재 디렉터리를 나타냅니다.

-maxdepth 1현재 디렉토리만 보라고 지시

type -f파일을 찾도록 지시

-name aaa\*.pngaaa다음으로 시작하고 끝나는 파일을 나타냅니다 ..png

-exec cp {} destination \;파일을 이름이 지정된 디렉터리에 복사합니다 destination.

내 환경에서는 를 *사용해야 합니다 \. 귀하의 환경에서는 이것이 필요하지 않을 수도 있으므로 사용할 수 있습니다.aaa*.png

관련 정보