Cp

複製文件夾時省略一個特定的嵌套文件夾

  • November 27, 2020

我知道如何使用該cp命令遞歸地(-r)複製嵌套文件夾,同時保留(-p)文件元數據,例如修改時間:

cp -pr "/path/from" "path/to"

有沒有辦法按名稱省略嵌套在第一級深處的一個特定文件夾?

例如,Photos正在複製一個名為的文件夾。我想跳過Dogs嵌套在其中的文件夾。我想要所有東西,但不想要/Photos/Dogs文件夾或其內容。

我想我可以讓它複製,然後刪除。但這是低效的。有沒有辦法首先避免文件夾複製。

我目前在 macOS Mojave 上工作,後來在 FreeBSD 12 上工作。

是的,您可以相當輕鬆地製作文件結構的副本,同時避免複製一個或多個子目錄,但您不會使用cp.

使用rsync,您可以使用排除模式排除文件和/或目錄。在您的情況下,您似乎想要使用

rsync -av --exclude='Photos/Dogs/' /path/from/ path/to

這將製作path/to一個精確的副本,/path/from同時避免Dogs在任何路徑匹配處呼叫任何目錄Photos/Dogs。如果您刪除/源目錄的尾隨,您將獲得path/to/from源文件夾的精確副本。

使用的排除模式將rsync忽略Dogs位於名為的目錄中的任何子目錄Photos,例如/path/from/Photos/Dogs/path/from/holidays/2013/Photos/Dogs。Using--exclude=Dogs/將排除任何呼叫的子目錄,Dogs而不管它的父目錄是什麼,而 using--exclude=Dogs將排除任何被呼叫的(無論文件類型如何)Dogs。要僅匹配直接在 下的Photos/Dogs目錄,請使用./path/from``--exclude='/Photos/Dogs/'

請參閱系統手冊中名為“包含/排除模式規則”的部分rsync

( -a)--archive選項將確保時間戳、權限等也被複製,並啟用遞歸複製。( -v)--verbose選項啟用詳細操作。

如果您想保留名稱之間的硬連結,請添加-H( )(再次參見手冊)。--hard-links``rsync

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