如何仅将指定目录中的文件复制到另一个文件夹

如何仅将指定目录中的文件复制到另一个文件夹

我正在尝试使用 .仅将一个目录中的文件(不包括文件夹或其子文件夹中的任何文件)复制到另一个位置cp /media/d/folder1/* /home/userA/folder2/。它正在复制文件,但问题是出现一个消息列表,说明cp: omitting directory.... 位于 中的所有文件夹folder1。有没有其他方法可以复制这些文件夹而不出现此消息?还有一件事,如果我想移动(而不是复制),我问同样的事情,如何做到这一点?谢谢

答案1

find /media/d/folder1/ -maxdepth 1 -type f | xargs cp -t /home/userA/folder2

管道字符之前的部分|查找给定目录中的文件,而不尝试查找给定目录的任何子目录下的其他文件。管道获取这些文件并将它们复制到目标目录之后的部分。如果您想移动文件而不是复制,可以更改cp命令。mv

答案2

一种更安全的方法(可以处理带有空格、换行符和其他奇怪字符的文件名)是使用find自身及其-exec操作:

   -exec command {} +
          This  variant  of the -exec action runs the specified command on
          the selected files, but the command line is built  by  appending
          each  selected file name at the end; the total number of invoca‐
          tions of the command will  be  much  less  than  the  number  of
          matched  files.   The command line is built in much the same way
          that xargs builds its command lines.  Only one instance of  `{}'
          is  allowed  within the command.  The command is executed in the
          starting directory.

所以,你可以这样做:

find /media/d/folder1/ -maxdepth 1 -type f -exec cp {} -t /home/userA/folder2

请注意,这也会复制隐藏文件。

答案3

cp -R dir1/* dir2

这会将所有内容(文件以及子目录)从 复制到 ,dir1没有dir2任何错误。

相关内容