複数モードのファイルを特定のディレクトリである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

最も効率的ですが、おそらく最も明確ではない方法は、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*
____

やや混乱して、この文書のワイルドカードはシェルによって拡張されています。ループが実行される前。 内部ループを引用符で囲む必要があるため、拡張ファイル名にはシェルメタ文字(正確に一致しない文字、通常は不規則な空白、またはワイルドカード表現)を含めることはできません。

関連情報