给出以下代码:
for d in ./Event_*/; do
set -- "$d/"*.mcp
if [ -e "$1" ]; then
# there is at least one .mcp file in $d
cp -rp -v -- "$d/KNYN.BHZ" ./newdir/
fi
done
我想要做的是,对于./Event_*/中的每个目录,如果存在文件* .mcp,请将文件KNYN.BHZ复制到新目录。由于所有文件名KNYN.BHZ都相同,如何在不覆盖的情况下复制所有KNYN.BHZ文件?正如我的代码现在所说,如果我运行它,输出只有一个文件KNYN.BHZ。
答案 0 :(得分:2)
您需要为每个文件指定一个唯一的名称。例如,您可以为目录名称添加后缀(或只是*
代表的部分):
for d in ./Event_*/; do
set -- "$d/"*.mcp
if [ -e "$1" ]; then
cp -rp -v -- "$d/KNYN.BHZ" "./newdir/KNYN.`echo $d | sed 's/[\.\/]//g;s/Event_//:'`.BHZ"
fi
done
因此Event_123/KNYN.BHZ
将成为./newdir/KNYN-123.BHZ
。
或者您可以使用计数器:
i=0;
for d in ./Event_*/; do
set -- "$d/"*.mcp
if [ -e "$1" ]; then
cp -rp -v -- "$d/KNYN.BHZ" "./newdir/KNYN-$((++i)).BHZ"
fi
done
因此,Event_123/KNYN.BHZ
将成为./newdir/KNYN-4.BHZ
(或者是mcp
的任何人工目录。
后一种解决方案更简单,而前者保留了与原始文件夹的关联(如果你反复这样做,这可能很重要 - 当然你需要不同的文件夹或添加日期:
for d in ./Event_*/; do
set -- "$d/"*.mcp
if [ -e "$1" ]; then
cp -rp -v -- "$d/KNYN.BHZ" "./newdir/KNYN.`echo $d | sed 's/[\.\/]//g;s/Event_//:'`_`date '+%Y-%m-%d'`.BHZ"
fi
done
产生./newdir/KNYN-123_2015-05-21.BHZ
(或将其移至目录以获取./2015-05-21/KNYN-123.BHZ
)。
答案 1 :(得分:1)
如果你正在使用GNU CoreUtils cp(非常有可能),那么cp
就有--backup
个选项。我认为numbered
方法也是一个很好的起点。
答案 2 :(得分:0)
您可以使用RANDOM
变量。
for d in ./Event_*/; do
set -- "$d/"*.mcp
if [ -e "$1" ]; then
# there is at least one .mcp file in $d
cp -rp -v -- "$d/KNYN.BHZ" ./newdir/KNYN_${RANDOM}.BHZ
fi
done