別のディレクトリにある名前が異なる複数のファイルを同じ新しいディレクトリにコピーしようとしています。ディレクトリ名は各ファイル名の先頭と同じです。たとえば、ディレクトリからファイルをディレクトリに/mnt/data/files/xyz
コピーしたいとします。ディレクトリからファイルをディレクトリにコピーしたいです。xyz_5
/mnt/data/myname/new
/mnt/data/files/abc
abc_7
/mnt/data/myname/new
これを行うために必要なファイルは60個あります。今どうすればいいですか?
cd /mnt/data/files/xyz;
cp -v *_5 /mnt/data/myname/new
すべてのファイルに対してこれを行います。しかし、コードでこれを行うことはできますか?
答え1
質問はあまり明確ではありませんが、たぶんあなたがしたいかもしれません
cp -v /mnt/data/files/xyz/*_5 /mnt/data/files/abc/*_7 /mnt/data/myname/new/
答え2
単純な for ループがアクションを実行します。
for i in /mnt/data/files/*; do
[ -d "$i" ] && cp -v "${i}/${i}_5" /mnt/data/myname/new/
done
forループはディレクトリの内容を繰り返します/mnt/data/files/
。ループ内で[ -d "$i" ]
エントリがディレクトリであることを確認してください。その場合は、同じ名前で_5
ディレクトリで終わるファイルをターゲットディレクトリにコピーします/mnt/data/myname/new/
。