条件付きでファイルを新しいディレクトリに移動する

条件付きでファイルを新しいディレクトリに移動する

ディレクトリに100個のファイルがあり、最初のファイルの一部が他のファイルと一致するファイルのみを保持し、条件が満たされない場合は、そのファイルがないすべてのファイルをmvします。たとえば、次のようになります。

 man_xyz_1.txt 
 sig_xyz_1.txt 
 man_abc_1.txt 
 man_ttc_1.txt
 man_ddd_1.txt
 sig_ddd_1.txt

ここではman_xyz_1.txt and sig_xyz_1.txt; man_ddd_1.txt and sig_ddd_1.txt、ファイル名()部分が一致するため、最初の2つのファイル()のみを保持し、プレフィックスが付いた対応するファイルがないため、別のディレクトリに*_xyz_1.txt and *_ddd_1.txtmv()しようとしています。どんな助けでも歓迎します。ありがとう、man_abc_1.txt and man_ttc_1.txtsig_*

ベストアンサー1

が実行されます反対つまり、man_*.txt現在のディレクトリ内のすべてのファイルを調べて、sig_そのファイルとペアになっているすべてのファイルをprocessedディレクトリに移動します。その後、残りのファイルを保存する場所に移動できます。

mkdir processed || exit
for name in man_*.txt; do
    if [ -e "sig_${name#man_}" ]; then
        mv "$name" "sig_${name#man_}" processed
    fi
done

パラメータ置換は${name#man_}値に展開され、対応する$nameプレフィックスman_文字列を削除します。

これはprocessedディレクトリが存在しないと仮定します。

テスト:

$ tree
.
|-- man_abc_1.txt
|-- man_ddd_1.txt
|-- man_ttc_1.txt
|-- man_xyz_1.txt
|-- script
|-- sig_ddd_1.txt
`-- sig_xyz_1.txt

1 directory, 7 files
$ sh script
$ tree
.
|-- man_abc_1.txt
|-- man_ttc_1.txt
|-- processed
|   |-- man_ddd_1.txt
|   |-- man_xyz_1.txt
|   |-- sig_ddd_1.txt
|   `-- sig_xyz_1.txt
`-- script

2 directories, 7 files

おすすめ記事