Shell
tar
和 find
刪除原始文件副檔名
我想
tb2
從一堆這樣的文本文件中創建文件。tar cfj $(basename ./2014_04_09.txt .txt).tb2 $(basename ./2014_04_09.txt)
2014_04_09.tb2
使用此命令,我可以創建一個不包含目錄的存檔文件。但是當命令使用這樣的
-exec
選項時find
,
find . -name "*.txt" -exec tar cfj $(basename "{}" .txt).tb2 $(basename "{}") \;
此命令創建具有原始副檔名 (
2014_04_09.txt.tb2
) 和存檔內的目錄的存檔文件。當僅應用單個文件時,如何使用
tar
帶有 like 的命令。find
你需要
-exec
一個 shell 命令來代替:find . -name "*.txt" -exec sh -c 'tar cfj $(basename "{}" .txt).tb2 "{}"' -- {} \;
此外,請注意您的
find
命令正在查找所有級別的文件。因此,basename
如果目前目錄中不存在文件,則使用傳遞文件列表將不起作用。詳細說明,
tar cfj foo.tb2 foo.txt
foo.txt
如果目前目錄中不存在將導致錯誤。因此,您需要將路徑傳遞給foo.txt
.