从 bash 中的多个文件中删除扩展名中的附加 .tar.gz
Removing additional .tar.gz in the extension from several files in bash
我有一个bash脚本负责每天移动和压缩目录下的一些旧日志文件。
做一些测试我注意到脚本一次又一次地递归压缩每个压缩文件,所以现在我有一堆文件名如下:$files.log(.tar.gz * N天)。
是否可以从所有这些文件中删除所有额外的 .tar.gz?
您可以使用如下简单的内联命令:
for old in *.tar.gz; do mv $old ${old%%.tar*}.tar.gz; done
这将找到由 .tar.gz
完成的每个文件
${old%%.tar*} 将获取所有文件名和扩展名,直到找到第一个 '.tar'。
然后我们再次添加.tar.gz,我们就完成了工作。
希望对您有所帮助。
Even if you will remove the extra .tar.gz extension from the file, it
won't be useful check the below example -
Compress :
ls -ltr file1
tar -cvzf file1.tar.gz file1
tar -cvzf file1.tar.gz.tar.gz file1.tar.gz
Rename :
mv -f file1.tar.gz.tar.gz file1.tar.gz
Uncompress :
tar -xvf file1.tar.gz.tar.gz
generated file : file1.tar.gz
means file1.tar.gz(which is in actual .tar.gz.tar.gz) generated
file1.tar.gz so you have to again uncompress the file.
In order to avoid this - you need to make changes in your script.
while selecting the file for compression you should avoid the already
compressed files using below cmd
find . -type f -name "file*" ! -name "*tar.gz"
如果您想解压每个文件但保持一级压缩,即您将它们一直解压缩到它们的 *.tar.gz 形式,您可以这样做:
while ls *.tar.gz.tar.gz &> /dev/null; do find -name '*.tar.gz.tar.gz' | while read f; do tar xfz "$f" && rm -f "$f"; done; done
当至少有一个以 .tar.gz.tar.gz:
结尾的文件时,第一个 while
语句会循环
while ls *.tar.gz.tar.gz &> /dev/null; do
从 find
管道传输的第二个 while
语句用于解析所有当前的 .tar.gz.tar.gz
find -name '*.tar.gz.tar.gz' | while read f
请注意,如果一次提取失败,循环将 运行 无限,因为您将始终有一个 .tar.gz.tar.gz 文件,因此第一个循环将永远不会结束。
我有一个bash脚本负责每天移动和压缩目录下的一些旧日志文件。
做一些测试我注意到脚本一次又一次地递归压缩每个压缩文件,所以现在我有一堆文件名如下:$files.log(.tar.gz * N天)。
是否可以从所有这些文件中删除所有额外的 .tar.gz?
您可以使用如下简单的内联命令:
for old in *.tar.gz; do mv $old ${old%%.tar*}.tar.gz; done
这将找到由 .tar.gz
完成的每个文件${old%%.tar*} 将获取所有文件名和扩展名,直到找到第一个 '.tar'。
然后我们再次添加.tar.gz,我们就完成了工作。
希望对您有所帮助。
Even if you will remove the extra .tar.gz extension from the file, it won't be useful check the below example -
Compress :
ls -ltr file1
tar -cvzf file1.tar.gz file1
tar -cvzf file1.tar.gz.tar.gz file1.tar.gz
Rename :
mv -f file1.tar.gz.tar.gz file1.tar.gz
Uncompress :
tar -xvf file1.tar.gz.tar.gz
generated file : file1.tar.gz
means file1.tar.gz(which is in actual .tar.gz.tar.gz) generated file1.tar.gz so you have to again uncompress the file.
In order to avoid this - you need to make changes in your script. while selecting the file for compression you should avoid the already compressed files using below cmd
find . -type f -name "file*" ! -name "*tar.gz"
如果您想解压每个文件但保持一级压缩,即您将它们一直解压缩到它们的 *.tar.gz 形式,您可以这样做:
while ls *.tar.gz.tar.gz &> /dev/null; do find -name '*.tar.gz.tar.gz' | while read f; do tar xfz "$f" && rm -f "$f"; done; done
当至少有一个以 .tar.gz.tar.gz:
结尾的文件时,第一个while
语句会循环
while ls *.tar.gz.tar.gz &> /dev/null; do
从 find
管道传输的第二个 while
语句用于解析所有当前的 .tar.gz.tar.gz
find -name '*.tar.gz.tar.gz' | while read f
请注意,如果一次提取失败,循环将 运行 无限,因为您将始终有一个 .tar.gz.tar.gz 文件,因此第一个循环将永远不会结束。