Bash:複製包含(大量)特殊字元的檔案列表

Bash:複製包含(大量)特殊字元的檔案列表

我很清楚如何使用 bash 將文件列表簡單地複製到另一個位置,但問題是我的文件列表包含的文件名幾乎包含需要在 bash 中轉義的每個字元。有大量的空格、!、“,”、“'”、?,以及您能想到的幾乎所有其他字元都需要轉義。

我最初厭倦了瀏覽文本文件並轉義所有這些字符,但這......令人筋疲力盡,即使使用搜索和替換(但是這確實有效)(我用更小的文件列表測試了它。)我還嘗試添加單個在路徑之前和之後的文字檔案中引用引號,但這不起作用。我還嘗試在 cp 之後的 % 之前添加單引號,但顯然我不知道我在做什麼。 :) (我確實知道,如果我要以某種方式用單引號包圍檔案路徑,則必須在文字檔案中轉義單引號。)

我使用此命令將文件列表複製到另一個位置,但同樣,它不適用於特殊字元。

cat file.txt | xargs -J % cp % ./folderToMoveto/

我知道還有其他命令可以執行相同的操作,而無需將任何內容通過管道傳輸到 xargs 中,這裡的一些答案說 xargs 可以自己完成,但我還沒有讓這些命令工作,而上面的命令確實工作。

另外,我使用的是 OS X。

答案1

GNU xargs 有一個-0選項允許它讀取空字節分隔資料。在 Linux 上,您可以執行以下操作:

tr '\n' '\0' < file.txt | xargs -0 cp -t /folder/to/move/to

遺憾的是,Apple 已將其舊版 Darwin 手冊頁網站下線,因此我無法檢查是否有 MacOS 同等網站。

相關內容