Command-Line
如何查找文件並複制其目錄?
我使用以下命令查找文件並將其複製到其他地方,
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``.