여러 모드의 파일을 특정 디렉터리인 bash로 이동하는 방법은 무엇입니까?

여러 모드의 파일을 특정 디렉터리인 bash로 이동하는 방법은 무엇입니까?

여러 정의된 스키마가 있는 파일을 이동해야 합니다. 예:

Z_*ana_bwk_na_N*.png
Z_*ana_bwk_dwda*.png
Z_*ana_bwkman_dwdna*
Z_*ana_bwkman_dwdc*
Z_*EDZW*_nwv01*_p00_na_N*WV11.png
Z_*EDZW*_nwv01*_p00_nh_N*WV11.png
Z_*nwv01*_hsy_NA*.png
Z_*EDZW_*_htp_na_N_*_WV11SW.png
Z_*_rft_na_*.png
Z_*_r12*

정의된 폴더에서 다른 폴더로.

가장 경제적인 방법으로 이를 어떻게 수행할 수 있습니까? 스크립트에서 cron에서 실행하시겠습니까?

이러한 패턴을 동일한 스크립트에서 더 잘 정의할 수 있습니까, 아니면 패턴이 포함된 별도의 텍스트 파일에서 가져올 수 있습니까?

답변1

이것은 매우 간단합니다.

mv Z_*ana_bwk_na_N*.png Z_*ana_bwk_dwda*.png Z_*ana_bwkman_dwdna* -t /your/directory/

파일 입력을 더 우아하게 만들고 싶다면:

PATTERNS=`cat input.txt | paste -sd " " - ` && mv $PATTERNS -t /your/directory/

답변2

패턴이 패턴이라는 파일에 있다고 가정합니다.

mapfile -t arr < patterns && mv -t destination "${arr[@]}"

답변3

가장 효율적이지만 아마도 가장 명확하지 않은 방법은 mv하나의 크고 행복한 명령으로 모든 것을 열거하는 것입니다.

mv Z_*ana_bwk_na_N*.png \
    Z_*ana_bwk_dwda*.png \
    Z_*ana_bwkman_dwdna* \
    Z_*ana_bwkman_dwdc* \
    Z_*EDZW*_nwv01*_p00_na_N*WV11.png \
    Z_*EDZW*_nwv01*_p00_nh_N*WV11.png \
    Z_*nwv01*_hsy_NA*.png \
    Z_*EDZW_*_htp_na_N_*_WV11SW.png \
    Z_*_rft_na_*.png \
    Z_*_r12* \
  destination

분할하고 싶다면(아마도 "명령줄이 너무 길어서") 여기에서 문서를 사용할 수 있습니다.

while read files; do
    mv $files dest
done <<____
    Z_*ana_bwk_na_N*.png
    Z_*ana_bwk_dwda*.png
    Z_*ana_bwkman_dwdna*
    Z_*ana_bwkman_dwdc*
    Z_*EDZW*_nwv01*_p00_na_N*WV11.png
    Z_*EDZW*_nwv01*_p00_nh_N*WV11.png
    Z_*nwv01*_hsy_NA*.png
    Z_*EDZW_*_htp_na_N_*_WV11SW.png
    Z_*_rft_na_*.png
    Z_*_r12*
____

대상을 매개변수화하려는 경우에도 그렇게 할 수 있습니다.

while read destination files; do
    mv $files "$destination"
done <<____
    here       Z_*ana_bwk_na_N*.png
    here       Z_*ana_bwk_dwda*.png
    here       Z_*ana_bwkman_dwdna*
    there      Z_*ana_bwkman_dwdc*
    there      Z_*EDZW*_nwv01*_p00_na_N*WV11.png
    everywhere Z_*EDZW*_nwv01*_p00_nh_N*WV11.png
    here       Z_*nwv01*_hsy_NA*.png
    elsewhere  Z_*EDZW_*_htp_na_N_*_WV11SW.png
    there      Z_*_rft_na_*.png
    anywhere   Z_*_r12*
____

다소 혼란스럽게도 이 문서의 와일드카드는 셸에 의해 확장됩니다.루프가 실행되기 전에. 내부 루프를 따옴표로 묶어야 하기 때문에 확장된 파일 이름에는 쉘 메타 문자(정확히 일치하지 않는 문자, 일반적으로 불규칙한 공백 또는 와일드카드 표현)가 포함될 수 없습니다.

관련 정보