在保留目录结构的同时在 `find` 中使用 `cp` (bash)
Using `cp` within `find` while preserving directory structure (bash)
这是一个关于在 find
中使用 cp
同时保留目录结构的具体问题。这是看起来应该起作用的方式,但也许有一种方法可以做得更好。我使用 find
的原因是因为我只想复制特定年龄的文件。
我有这样的目录结构。操作系统是Ubuntu16.04.
folders
folder1
file1.txt
folder2
file1.txt
file2.txt
folder3
file1.txt
我在 find
命令中使用 cp
命令,因此...
find "$pathtofolder"/* -mmin +"$timeinmins" -type f -name "*.txt" -exec cp --parents {} /var/www/website/archives \;
--parents
标志将整个路径复制到文件,所以我得到类似 archives/var/www/website/folders/folder1/file1.txt
的内容。这不是我想要的。我只想要 archives/folder1/file1.txt
.
-R
和 -a
标志在 find
内的这条语句中不起作用。当我使用它们中的任何一个时,它们似乎完全阻止了复制的发生。
我做错了什么?有更好的方法吗?
非常感谢。
给定以下变量:
pathtofolder="/tmp/test"
pathtoarchive="/var/www/website/archives"
你可以使用这个:
find "$pathtofolder" -type f -mmin +"$timeinmins" -exec bash -c 'dir="/$(sed "s,^,,;s,/[^/]\+$,," <<< "")"; mkdir -p "$dir"; cp -v "" "$dir"' _ {} "$pathtoarchive" "${pathtofolder}/folders/" \;
sed
用于制作目标目录并将其赋值给变量dir
。该命令从 find
.
找到的文件名中删除一级目录和名称
mkdir -p
将创建目标目录,如果目录已经存在则不会报错。
创建目录后,复制完成。
这是一个关于在 find
中使用 cp
同时保留目录结构的具体问题。这是看起来应该起作用的方式,但也许有一种方法可以做得更好。我使用 find
的原因是因为我只想复制特定年龄的文件。
我有这样的目录结构。操作系统是Ubuntu16.04.
folders
folder1
file1.txt
folder2
file1.txt
file2.txt
folder3
file1.txt
我在 find
命令中使用 cp
命令,因此...
find "$pathtofolder"/* -mmin +"$timeinmins" -type f -name "*.txt" -exec cp --parents {} /var/www/website/archives \;
--parents
标志将整个路径复制到文件,所以我得到类似 archives/var/www/website/folders/folder1/file1.txt
的内容。这不是我想要的。我只想要 archives/folder1/file1.txt
.
-R
和 -a
标志在 find
内的这条语句中不起作用。当我使用它们中的任何一个时,它们似乎完全阻止了复制的发生。
我做错了什么?有更好的方法吗?
非常感谢。
给定以下变量:
pathtofolder="/tmp/test"
pathtoarchive="/var/www/website/archives"
你可以使用这个:
find "$pathtofolder" -type f -mmin +"$timeinmins" -exec bash -c 'dir="/$(sed "s,^,,;s,/[^/]\+$,," <<< "")"; mkdir -p "$dir"; cp -v "" "$dir"' _ {} "$pathtoarchive" "${pathtofolder}/folders/" \;
sed
用于制作目标目录并将其赋值给变量dir
。该命令从 find
.
mkdir -p
将创建目标目录,如果目录已经存在则不会报错。
创建目录后,复制完成。