linux - 创建路径名来检查文件不存在/权限被拒绝错误

标签 linux bash

来自 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/

相关文章:

linux - 从 bash 脚本中检查自动完成是否已初始化

bash - 在 bash 中,如何将一个变量用作另一个变量名称的一部分?

linux - 如何在 shell 命令行(-e 开关)中将 gnuplot 与 awk 一起使用

c++ - 求教RADIUS(AAA协议(protocol))的建议

java - RXTX 读取响应太短 - 无法接收客户端回复的所有字节

macos - mac-mini 上的 ubuntu : shell script to fix my screen-resolution?

c - 我应该使用哪个错误值?

linux - root可以解析localhost,普通用户则不能

regex - 仅使用未转义分隔符分割字符串

bash - Nvidia-Docker2 不会安装在 Cloudformation UserData bash 脚本中