Shell

tarfind 刪除原始文件副檔名

  • April 9, 2014

我想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.

引用自:https://unix.stackexchange.com/questions/123847