Bash

如何僅將指定目錄中的文件複製到另一個文件夾

  • August 17, 2020

我正在嘗試使用cp /media/d/folder1/* /home/userA/folder2/. 它正在復製文件,但問題是出現了一個消息列表,說明cp: omitting directory.... 位於folder1. 有沒有其他方法可以複製這些文件夾而不會出現此消息?還有一件事,如果我想移動(而不是複制),我問同樣的事情,怎麼做?謝謝

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

管道字元之前的部分在|給定目錄中查找文件,而不嘗試在給定目錄的任何子目錄下查找其他文件。管道之後的部分獲取這些文件並將它們複製到目標目錄。如果要移動文件而不是複制,可以更改cp命令。mv

一種更安全的方法(可以處理帶有空格、換行符和其他奇數字元的文件名)是使用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

請注意,這也會複製隱藏文件。

引用自:https://unix.stackexchange.com/questions/190383