来自 Linux Bash 新手的问候!
我有一个 list.txt,其中包含我想要复制到目的地($2)的文件列表。这些是独特的图像,但其中一些具有相同的文件名。
我的计划是循环遍历文本文件中的每一行,当文件不存在时复制到目标,当文件存在时进行 mv 重命名。
我遇到的问题是创建路径名来检查文件。在下面的代码中,我仅从路径名中获取文件名,并且我想将其添加到目标 ($2),中间使用“/”来检查文件。
当我运行下面的程序时,我在第 9 行得到“权限被拒绝”,这是我尝试创建路径的地方。
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
我对此很陌生,所以很感激我可能会错过一些明显的东西,但如果有人可以提供任何建议,我将不胜感激!
最佳答案
提交此内容是因为 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
为了让事情变得简单,目前没有计算重复项的逻辑。 (这意味着代码将处理一个重复条目)作为替代方案,您可以预先从 list.txt
获取 uniq
以避免重复情况。
关于linux - 创建路径名来检查文件不存在/权限被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20116282/