2014-09-01 162 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