符號連結所有檔案但複製某些副檔名

符號連結所有檔案但複製某些副檔名

我想知道如何能夠符號連結目錄結構中的所有文件,然後複製該目錄中特定副檔名的文件。我基本上將 /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/ 相關的實際路徑。我的範例顯示了並排時的相對連結(也可以建立絕對符號連結)。

相關內容