我想将我收藏的照片移动到“/home/Bruno/Archiv/Bilder”目录中,该目录是“/home/Bruno/Bilder”目录的父目录。
我开始于:
find -ctime +365 -exec echo mv '{}' ../Archiv/Bilder/'{}' \; | bash
但 find 在 {} 中包含当前目录的点。所以我得到:
mv ./2013/01/19/DSC_0141.JPG ../Archiv/Bilder/./2013/01/19/DSC_0141.JPG
mv: das Verschieben von »./2013/01/23/IMG_0052.JPG“ nach »../Archiv/Bilder/./2013/01/23/IMG_0052.JPG“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden
所以我去掉了使用 sed 的点:
find -ctime +577 -exec echo mv '{}' ../Archiv/Bilder/'{}' \; | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash
但我得到同样的错误:
mv: das Verschieben von »./2013/01/10/IMG_0141.JPG“ nach »../Archiv/Bilder/2013/01/10/IMG_0141.JPG“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden
所以我想切换到 rsync 来完成这项工作:
find -ctime +577 -exec echo rsync -n --remove-source-files '{}' ../Archiv/Bilder/'{}' \; | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash
rsync 失败了,但它更加详细:
rsync: change_dir#3 "/home/Bruno/Bilder//../Archiv/Bilder/2013/01/10" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(712) [Receiver=3.1.0]
我在这里做错了什么?
答案1
/home/Bruno/Archiv/Bilder/2013/01/23/
您的 find 命令遇到了中间目录(在本例中)尚未创建的问题。这与.
你路径中的(无害的)“”无关。
您要么必须首先创建目标的整个目录结构,要么创建一个您调用的小脚本,而不是mv
首先创建目标目录,然后进行移动。
mkdirmv
:
#!/bin/sh
mkdir -p -- "$(dirname $2)"
mv -- "$1" "$2"
答案2
供将来参考 - 您可以install
直接执行此操作:
install -D ./2013/01/10/IMG_0141.JPG ../Archiv/Bilder/2013/01/10/IMG_0141.JPG
注意:您需要在第二个参数中附加文件路径才能使其工作。换句话说:
不正确:
find . -ctime +365 -exec install -D '{}' ../Archiv/Bilder/ \;
正确的:
find . -ctime +365 -exec install -D '{}' '../Archiv/Bilder/{}' \;
根据手册页install
:
-D 创建 DEST 除最后一个之外的所有主要组件,然后将 SOURCE 复制到 DEST