用于重命名的shell命令,然后在具有匹配模式的多个文件上执行gzip

时间:2018-07-25 14:56:10

标签: shell

我的文件夹中有很多扩展名为.txt的文件。我想要 首先重命名它们,然后使用gzip压缩所有这些文件。有没有办法读取所有.txt文件并执行紧随gzip的mv循环,而不是

mv file1.txt file1_n.txt
gzip file1_n.txt
mv file2.txt file2_n.txt
gzip file2_n.txt

....这非常麻烦。我知道我可以为文件名中的.txt模式进行grep转换,但不确定如何将每个文件存储为变量,并依次为mv和gzip循环。

2 个答案:

答案 0 :(得分:0)

假设您的shell是bash,请使用for循环:

for FILE in $(ls file*.txt); do
    NEWFILE="${FILE%.*}"_n.txt
    mv "$FILE" "$NEWFILE"
    gzip "$NEWFILE"
done

答案 1 :(得分:0)

您可以使用此:

 find -name "*.txt" -exec rename -e 's/.txt/_n.txt/' {} \;  ; gzip *_n.txt

说明:

  • find -name "*.txt"搜索以*.txt结尾的文件
  • -exec rename -e 's/.txt/_n.txt/' {} \;重命名文件
  • ; gzip *_n.txt gzip以_n.txt结尾的所有文件

例如您的文件:

$touch file1.txt file2.txt
$ ls
file1.txt  file2.txt
$ find -name "*.txt" -exec rename -e 's/.txt/_n.txt/' {} \;  ; gzip *_n.txt
$ ls
file1_n.txt.gz  file2_n.txt.gz