2014-09-01 164 views
2

我想写一个bash脚本,从.zip文件中提取文件并将它们转换为文本文件 - 几乎在文件名的末尾添加".txt",因为它们都是文本文件但没有扩展名。bash脚本:提取和转换文件

我几乎是新的壳。我发现这个:

cd /path/to/files 
for i in *.gz 
do 
    gunzip $i 
done 
for i in *.zip 
do 
    unzip $i 
done 

我想它提取的文件,但我如何重命名/转换它们?

+1

您可以使用['find'](http://man7.org/linux/man-pages/man1/find.1.html)命令查找所有不以'.zip'结尾的文件或'.gz',并自动重命名文件以添加'.txt'后缀。 – 2014-09-01 11:53:47

回答

2

您可以根据extglob发现没有.txt扩展名的文件:

shopt -s extglob 

for f in !(*.txt); do 
    mv "$f" "$f".txt 
done 

PS:您还可以使用!(*.txt)模式来匹配所有不带扩展名的文件。

+1

当然,这也将重命名Zip和GZip文件。 – 2014-09-01 12:02:22

+0

非常真实。我首先使用这个glob模式写了答案:'!(*。txt | *。*)',但是然后重新读取了'它们都是文本文件'的问题,所以我假定所有非文本的文件都会离开。 – anubhava 2014-09-01 12:05:11

+0

也'mv“$ f {,。txt}';) – jm666 2014-09-01 12:14:08