ディレクトリに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.txt
mv()しようとしています。どんな助けでも歓迎します。ありがとう、man_abc_1.txt and man_ttc_1.txt
sig_*
答え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