在“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
。