我正在尝试运行一个 for 循环来复制目录中的所有文件,然后将它们放入备份目录中。有多个具有不同名称的子目录,所以我认为我应该使用多个通配符,这样我就不必列出所有这些并添加另一个 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