考虑:
ls -al ../public-back
drwxrwxr-x 4 apache apache 4096 Apr 19 03:32 templates
ls -al ../public-back/templates
drwxrwxr-x 2 apache apache 4096 Apr 19 03:33 content
drwxrwxr-x 2 apache apache 20480 Apr 20 06:14 images
drwxrwxr-x 2 apache apache 4096 Apr 19 03:35 video
ls -al /public
drwxrwxr-x 4 apache apache 4096 Apr 20 09:49 templates
ls -al /public/templates
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 content
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 images
drwxrwxr-x 2 apache apache 4096 Apr 20 09:50 video
/public-back/templates
如何将具有权限的内容递归地移动到/public/templates
?
答案1
除非我误解了这个问题,否则这将有效:
mv /public-back/templates/* /public/templates
此外,除非您有大量的文件,否则-i
在覆盖任何内容之前都会进行询问,这在使用通配符(如)时会增加一些安全性*
。
答案2
cp 的手册页指出:
-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively
尝试;
cp -rp /public-back/templates/* /public/templates/
答案3
当将项目从我的拇指驱动器移动到我的 OSMC 系统时,我发现以下内容非常有用:
find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;
下面解释其工作原理。
顺便说一句,不要忘记在源目录或目标目录名称中的任何空格前添加反斜杠(参见上文)。
find finds all files and folders in the destination path.
/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.
-name '*' filters on names. If you do not escape or quote this then
the shell will expand it before find sees it.
-exec Executes a command, in our case mv
-v Verbose, so you can see what's happening (optional)
{} is replaced by the name of the found object.
实际上,您是在查找所有文件和所有文件夹并逐个移动它们(或者,如果先找到某个目录,则移动该目录及其内容)。这会为每次移动启动一个新进程,效率非常低。仅当常规命令失败时才使用此方法。
答案4
mv 似乎无法做到这一点。但是您可以使用这个小技巧,效果非常好:
tar cf - . |(cd /targetdir; tar xvf -)
并保留权限和所有内容。
注意:以上方法都不适用于我,所以才采用这种解决方法。