gpt4 book ai didi

linux - 文本文件中的单引号完整路径文件无法执行 for 循环处理 mv : cannot stat . .. 没有这样的文件或目录

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:51 26 4
gpt4 key购买 nike

我有一个测试文件,其中包含我想要移动/删除的空格分隔的文件。

示例行:

'/data/owncloud/A0934095JG 1231/files/Photos/Paris 2016 08 28.jpg'

我想在 for 循环中将文件移至另一个目录:

for i in $(cat marktodelete);do mv $i /data/willbedeleted/;done

但是它给了我一个错误。

mv: cannot stat ‘'/data/owncloud/A0934095JG 1231/files/Photos/Paris 2016 08 28.jpg'’: No such file or directory

为什么?

第二个问题之后,我如何才能将该文件实际移动到新位置,并在名称中以某种方式包含原始目录,就像上面的文件在新位置中一样:

/data/willbedeleted/Paris 2016 08 28.jpg-/data/owncloud/A0934095JG 1231/files/Photos/ 

或者因为斜杠也可以这样,没问题

/data/willbedeleted/Paris 2016 08 28.jpg-data-owncloud-A0934095JG-1231-files-Photos

最佳答案

回答第一个问题,有两个与空格相关的问题在路径名中。一个是在 for .. in .. 循环中,另一个是在 mv 命令中。除非您双引号文件名,否则会导致分词。另一方面,如果您在资源文件 marktodelete 中用引号将文件名括起来,则引号字符将被解释为文件名的一部分。

假设文件中的一行包含一个文件名,请尝试改为:

while IFS= read -r i; do
i=${i#\'} # remove leading single quote
i=${i%\'} # remove trailing single quote
mv -- "$i" /data/willbedeleted/
done < marktodelete

从第二个问题开始,您可以使用以下方法更改目标文件名:

while IFS= read -r i; do
i=${i#\'} # remove leading single quote
i=${i%\'} # remove trailing single quote
basename="${i##*/}" # extracts filename
orgdir="${i%/*}" # extracts directory name
newname="${basename}-${orgdir//[\/ ]/-}"
mv -- "$i" "/data/willbedeleted/$newname"
done < marktodelete

希望这有帮助。

关于linux - 文本文件中的单引号完整路径文件无法执行 for 循环处理 mv : cannot stat . .. 没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58407171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com