我正在尝试使用 .仅将一个目录中的文件(不包括文件夹或其子文件夹中的任何文件)复制到另一个位置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
任何错误。