複数の定義されたスキーマを持つファイルを移動する必要があります。例:
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
最も効率的ですが、おそらく最も明確ではない方法は、1つの大きくて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*
____
やや混乱して、この文書のワイルドカードはシェルによって拡張されています。ループが実行される前。 内部ループを引用符で囲む必要があるため、拡張ファイル名にはシェルメタ文字(正確に一致しない文字、通常は不規則な空白、またはワイルドカード表現)を含めることはできません。