我有一個包含子目錄和文件的目錄(稱爲「源」)。使用bash我需要將在此目錄及其子目錄中找到的所有文件(只有文件,而不是目錄)複製到不同的目錄(稱爲「目標」)。目錄樹不得維護/必須平鋪。只有不包含在文本文件中的文件(稱爲'excluded.txt')必須被複制。如何在壓扁樹結構的同時複製目錄/子目錄中的所有文件(不包括列表中包含的文件)?
源輸入的例子:
/home/source/AAA/file1.xyz
/home/source/AAA/GGG/file2.xyz
/home/source/BBB/file3.tuv
/home/source/BBB/HHH/file4.tuv
目的地輸出的例子:
/home/destination/file1.xyz
/home/destination/file2.xyz
/home/destination/file3.tuv
/home/destination/file4.tuv
一旦文件被複制,這四個文件名+(file1.xyz等,)加入到excluded.txt (每個文件名放在一個新行中)。這些文件將被定期從目標目錄中刪除。
如果bash腳本再次執行,並且存在源文件,如果它們的文件名出現在excluded.txt文件中,則不應將它們複製到目標。
由於維護了目錄樹結構,我試圖通過「cp」和「rsync」失敗。我也沒有使用「查找」,因爲在採取複製操作之前,我無法在「excluded.txt」列表中檢查結果。
find/home/source/-type f -exec cp -n {}/home/destination/\; 如果您想避免覆蓋目標文件夾中的現有文件,請使用'cp -n' –
@KuldeepSingh我最初編寫了這段代碼作爲答案,但我忘記考慮到OP有排除文件的文件 – Aserre
可以避免使用cp命令的-n選項來重寫文件。除非排除.txt在其他地方需要 –