forループを実行してディレクトリ内のすべてのファイルをコピーし、バックアップディレクトリに入れようとします。異なる名前のサブディレクトリが複数あるため、複数のワイルドカードを使用する必要があります。これは私のスクリプトです。
#!/bin/bash
DIR="/home/users/data/*"
for file in $DIR
do
cp "$file"/**/**/*.txt* "$DIR"/backup/"$file"
done
スクリプトを実行するとサブディレクトリに入ることができず、ディレクトリが次のようになると思います。
/directory1/**/**/*.txt*
どんな提案でも大変感謝します。
答え1
/home/users/data
コピーのみを希望する場合/home/users/data/backup
:
rsync -ai --exclude=/backup/ /home/users/data/ /home/users/data/backup
また、backup
コマンドを再実行すると、ディレクトリ自体がコピーされないように除外されます。ソースディレクトリ(および除外パターンのディレクトリ)には、後にスラッシュが必要です。
答え2
ここを利用すればもっといいと思いますfind
。
for FILE in $DIR
do
find $DIR -iname '*.txt' -exec cp -fv {} ${DIR}/backup/${FILE} \;
done
ディレクトリ構造を維持したい場合は、--parents
オプションを追加できます。cp