在“find”中使用“cp”,同时保留目录结构(bash)

在“find”中使用“cp”,同时保留目录结构(bash),bash,find,cp,Bash,Find,Cp,这是一个关于在保留目录结构的同时在find中使用cp的特定问题。这似乎是它应该起作用的方式,但也许有一种方式可以做得更好。我之所以使用find,是因为我只想复制某个年龄段的文件 我有一个这样的目录结构。操作系统是Ubuntu 16.04 folders folder1 file1.txt folder2 file1.txt file2.txt folder3 file1.txt 我正在find命令中使用cp命令,因此 find "$pa

这是一个关于在保留目录结构的同时在
find
中使用
cp
的特定问题。这似乎是它应该起作用的方式,但也许有一种方式可以做得更好。我之所以使用
find
,是因为我只想复制某个年龄段的文件

我有一个这样的目录结构。操作系统是Ubuntu 16.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
标志复制了文件的整个路径,因此我得到了类似于
归档/var/www/website/folders/folder1/file1.txt的内容。这不是我想要的。我只想
归档/folder1/file1.txt

-R
-a
标志在
find
中的此语句中不起作用。当我使用它们中的任何一个时,它们似乎完全阻止了复制的发生

我做错了什么?有更好的方法吗


非常感谢。

鉴于以下变量:

pathtofolder="/tmp/test" 
pathtoarchive="/var/www/website/archives" 
你可以用这个:

 find "$pathtofolder" -type f -mmin +"$timeinmins" -exec bash -c 'dir="$2/$(sed "s,^$3,,;s,/[^/]\+$,," <<< "$1")"; mkdir -p "$dir"; cp -v "$1" "$dir"' _ {} "$pathtoarchive" "${pathtofolder}/folders/" \;

find“$pathtofolder”-type f-mmin+“$timeinmins”-exec bash-c'dir=“$2/$(sed“s,^$3,,;s,/[^/]\+$,”给定以下变量:

pathtofolder="/tmp/test" 
pathtoarchive="/var/www/website/archives" 
你可以用这个:

 find "$pathtofolder" -type f -mmin +"$timeinmins" -exec bash -c 'dir="$2/$(sed "s,^$3,,;s,/[^/]\+$,," <<< "$1")"; mkdir -p "$dir"; cp -v "$1" "$dir"' _ {} "$pathtoarchive" "${pathtofolder}/folders/" \;

find“$pathtofolder”-键入f-mmin+“$timeinmins”-exec bash-c'dir=“$2/$(sed“s,^$3,,;s,/[^/]\+$,”非常感谢。代码比我预想的要复杂。目录的数量会对代码产生影响吗?例如,
pathtofolder=/var/www/website/laravel/folder
pathtoarchive=/var/www/website/laravel/archives
。我使用的方法正确吗?将其拆分为两部分以查找旧文件会更简单吗首先,我想我可以使用
cp-a
,或者我可以用一种更简单的方式进行复制。@sdexp它不会有任何区别,但是由于源目录和目标目录共享相同的路径,所以从那里执行
/var/www/website/laravel
查找
命令可能更容易。@sdexp另一种方法是o使用
rsync
非常感谢。不幸的是,当我尝试你的方法时,我仍然得到
存档/var/www
,我还远远不能调试。正如你所说,使用
rsync
可能会容易得多,只需复制所有文件。然后只删除太旧的文件。非常感谢。代码更简单比我想象的要复杂。目录的数量会对代码产生影响吗?例如,
pathtofolder=/var/www/website/laravel/folder
pathtoarchive=/var/www/website/laravel/archives
。我使用的方法正确吗?首先将其拆分为两个文件以查找较旧的文件会更简单吗只需使用
cp-a
,或者我可以用一种更简单的方式进行复制。@sdexp它不会有任何区别,但是由于源目录和目标目录共享相同的路径,所以从那里执行
/var/www/website/laravel
查找
命令可能更容易。@sdexp另一种方法是使用
rsync
谢谢你非常多。不幸的是,当我尝试你的方法时,我仍然得到
存档/var/www
,我还远远不能调试。像你说的那样,使用
rsync
,只复制所有文件可能会容易得多。然后只删除太旧的文件。@tripleee不完全是重复的,因为OP发现了
--pa租用
cp
选项。他的问题实际上是在复制文件时去掉第一个路径级别。有多个答案可以解决这个问题,包括
rsync
tar
。我找到的答案,包括您提到的答案,只是一个简单的副本。我只想复制某些特定的文件。由于我没有太多bash经验,您可能是对的,我只需要对整个目录做一个简单的复制,然后在
查找
中做一个选择性的
rm
。@tripleee不完全是重复的,因为OP找到了
cp
--parents
选项。他的问题实际上是去掉第一条路径复制文件时的级别。有多个答案可以解决这个问题,包括
rsync
tar
。我找到的答案,包括您提到的答案,只是一个简单的副本。我只想复制某些文件。由于我没有太多bash经验,您可能认为我只需要执行simp就对了复制整个目录,然后在
find
中选择
rm