脚本bash递归合并目录,并为公共文件执行函数
我需要用bash脚本将几个目录递归地合并到一个目录中,但是当复制一个已经存在的文件时,我希望执行一个特定的函数。 首先,我在想:脚本bash递归合并目录,并为公共文件执行函数,bash,Bash,我需要用bash脚本将几个目录递归地合并到一个目录中,但是当复制一个已经存在的文件时,我希望执行一个特定的函数。 首先,我在想: mkdir merge cp -r dir1/* dir2/* merge/ 但是当一个同名文件已经存在时,我不想覆盖或放弃,我想执行我的函数,比如: if [-f $file] do myfunction() done 你知道我的剧本应该是什么样子吗? 谢谢您可以使用这样一个简单的脚本: #!/usr/bin/env bash
mkdir merge
cp -r dir1/* dir2/* merge/
但是当一个同名文件已经存在时,我不想覆盖或放弃,我想执行我的函数,比如:
if [-f $file]
do myfunction() done
你知道我的剧本应该是什么样子吗?
谢谢您可以使用这样一个简单的脚本:
#!/usr/bin/env bash
myfunction()
{
printf "Omit %s\n" "$i"
}
dst=merge
mkdir -p "$dst"
# put a list of directories you want to copy here
for i in dir{1..10}
do
if [ -e "$dst"/"$i" ]
then
myfunction "$i"
continue
fi
cp -r "$i" "$dst"
done
它应该适用于简单的情况,但可以进行优化。对于
例如,可以创建一个
应复制并仅运行一次或多次的目录列表
使用
xargs
以避免参数列表过长的问题。您可以使用以下脚本:
#!/usr/bin/env bash
# make destination directory
dest=merge
mkdir -p $dest
# If file exists in target directory call `some_function`
# Do not overwrite existing files
for f in dir{1,2,3}/*; do
[ -f "$dest/$(basename $f)" ] && some_function
cp -rn "$f" "$dest"
done