来自Linux Bash新手的Hello!
我有一个list.txt,其中包含我要复制到目标的文件列表($ 2)。这些是独特的图像,但其中一些具有相同的文件名。
我的计划是循环遍历文本文件中的每一行,当文件不存在时,将副本发送到目标,并在存在时进行mv重命名。
我遇到的问题是创建路径名来检查文件。在下面的代码中,我只从路径名中获取文件名,我想将其添加到目的地($ 2),中间用“/”来检查文件。
当我运行下面的程序时,我在第9行得到“Permission Denied”,这是我尝试创建路径的地方。
for line in $(cat list.txt)
do
file=$[ basename $line ]
path=$[ $2$file ]
echo $path
if [ ! -f $path ];
then
echo cp $line $2
else
echo mv $line.DUPLICATE $2
fi
done
我是新手,所以感谢我可能会遗漏一些明显的东西,但如果有人可以提供任何建议,我将不胜感激!
答案 0 :(得分:0)
提交这个,因为OP是BASH脚本中的新功能,尚未发布好的答案。
DESTINATION="$2"
while read -r line; do
file="${line##*/}"
path="$2/$file"
[[ ! -f $path ]] && cp "$line" "$path" || mv "$line" "$path.DUP"
done < list.txt
目前没有计算重复项的逻辑来保持简单。 (这意味着代码将处理一个重复条目)作为替代方案,您事先从uniq
获得list.txt
以避免重复情况。
答案 1 :(得分:0)
@anubhava:你的脚本看起来不错。这是一个很小的补充,它可以与几个傻瓜一起使用 它为$ path.DUP名称添加了一个数字
UniqueMove()
{
COUNT=0
while [ -f "$1" ]
do
(( COUNT++ ))
mv -n "$1" "$2$COUNT"
done
}
while read -r line; do
file="${line##*/}"
path="$2/$file"
[[ ! -f $path ]] && cp "$line" "$path" || UniqueMove "$line" "$path.DUP"
done < list.txt