여러 정의된 스키마가 있는 파일을 이동해야 합니다. 예:
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*
____
다소 혼란스럽게도 이 문서의 와일드카드는 셸에 의해 확장됩니다.루프가 실행되기 전에. 내부 루프를 따옴표로 묶어야 하기 때문에 확장된 파일 이름에는 쉘 메타 문자(정확히 일치하지 않는 문자, 일반적으로 불규칙한 공백 또는 와일드카드 표현)가 포함될 수 없습니다.