我正在嘗試編寫一個shell腳本來備份目錄中的每個文件。 在奧得河得到的文件,我使用用''在bash中替換'''
FILENAMES="$(find -maxdepth 1 -not -path './.*' -type f)"
返回包含的所有文件名的東西。
如果沒有文件名包含空格,則使用
tar --exclude='archive.tar.bz2' -cvpjf archive.tar.bz2 $FILENAMES
做這項工作,一切都很好。
但是,如果有一個文件名「壞filename.txt」上述方法不起作用,焦油會抱怨說,它無法找到「文件名.txt」的「壞」。
我試圖通過使用內聯替換描述here來解決這個問題,但是,這並不工作:
TOARCHIVE=${FILENAMES// /'\ '}
基本上這樣做是更換空間在適當的位置,如果我echo
它。但tar
似乎沒有看到插入的'\'
。如果嘗試用兩個斜槓替換代碼,如'\\'
或'\\ '
tar
將看到兩個斜槓並再次發出抱怨。
我看到的類似問題的另一個解決方案是確保所有內容都在引號中,但這對我不起作用,因爲TOARCHIVE
包含多個文件的名稱。
您可能需要使用NUL分隔https://www.gnu.org/software/tar/manual/html_node/nul.html - 和通'-print0'來查找。 – ideasman42