在路径中使用多个通配符对目录中的所有文件运行命令

在路径中使用多个通配符对目录中的所有文件运行命令

我正在尝试运行一个 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

相关内容