将一年以上的文件移动到父存档目录

将一年以上的文件移动到父存档目录

我想将我收藏的照片移动到“/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

相关内容