![符號連結所有檔案但複製某些副檔名](https://rvso.com/image/1284422/%E7%AC%A6%E8%99%9F%E9%80%A3%E7%B5%90%E6%89%80%E6%9C%89%E6%AA%94%E6%A1%88%E4%BD%86%E8%A4%87%E8%A3%BD%E6%9F%90%E4%BA%9B%E5%89%AF%E6%AA%94%E5%90%8D.png)
我想知道如何能夠符號連結目錄結構中的所有文件,然後複製該目錄中特定副檔名的文件。我基本上將 /foo/a,b,c 中的所有檔案符號連結到 /bar/a,b,c ,然後複製具有特定副檔名的某些檔案。
答案1
從 /bar 目錄,為除這些擴充功能之外的所有內容建立所有符號連結。
find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \;
然後複製所有擴展,大部分情況下使用相同的命令。
find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \;
編輯:複製整個目錄結構,符號連結一些文件,複製其他文件。起初不確定這是否可以透過單一命令實現,但只是學習了一些其他有關 find 的方便技巧。
find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh
mv bar/foo/* bar/ && rm -R bar/foo/
唯一需要注意的重要事情是,在建立符號連結時,您需要給出連結與 foo/ 相關的實際路徑。我的範例顯示了並排時的相對連結(也可以建立絕對符號連結)。