Command-Line

如何查找文件並複制其目錄?

  • March 22, 2021

我使用以下命令查找文件並將其複製到其他地方,

find /search/ -name file.txt -exec cp -Rp {} /destination \;

如何複製父目錄中的所有文件和子目錄file.txt

例子,

/search/test/sub
/search/test/sub2
/search/test/file.txt
/search/test/file.doc

它們應該被複製為

/destination/sub
/destination/sub2
/destination/file.txt
/destination/file.doc

使用-execdir(不是標準謂詞,但經常實現),給定的實用程序將在找到文件的目錄中執行。

這意味著你可以做

find /search -name file.txt -execdir cp -Rp . /destination \;

沒有-execdir

find /search -name file.txt -exec sh -c 'cp -Rp "${1%/*}/." /destination' sh {} \;

或者,

find /search -name file.txt -exec sh -c 'cd "${1%/*}" && cp -Rp . /destination' sh {} \;

最後兩個變體為每個找到的文件執行一個簡短的內嵌腳本。該腳本將文件的路徑名作為其第一個參數(in $1),並使用${1%/*}(標準參數替換)從路徑名中去除文件名。然後它應用與cp第一個變體相同的命令-execdir

執行此操作的程式碼更忠實地模擬了頂部cd的變體實際所做的事情,而中間的變體通過引用路徑末尾的源目錄來繞過更改目錄。-execdir``.

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