`tar` 和 `find` 并删除原始文件扩展名

`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

答案1

您需要使用-execshell 命令:

find . -name "*.txt" -exec sh -c 'tar cfj $(basename "{}" .txt).tb2 "{}"' -- {} \;

此外,请注意您的find命令是发现各级文件。因此,basename如果当前目录中不存在文件,则使用传递文件列表将不起作用。

详细说明,

tar cfj foo.tb2 foo.txt

foo.txt如果当前目录中不存在,则会导致错误。因此,您需要将路径传递给foo.txt.

相关内容