【问题标题】:How to gunzip and copy files in a loop如何循环压缩和复制文件
【发布时间】:2020-07-19 21:43:44
【问题描述】:

我有一种情况,我必须阅读 gunzip 文件列表(例如:test.gztest[2020]*.gz)并将其移动到不同的文件夹(临时)。我正在使用 linux bash shell。 到目前为止,我已经这样做了:

for f in *.gz
do
 gunzip $f
done

当我运行脚本时,文件被成功压缩为 test.csvtest[2020].csv

之后我不知道如何将压缩文件(csv 文件)复制到“temp”文件夹。

我应该在这段代码之后打开另一个循环吗?或者我可以在一个循环中压缩并复制文件吗?

我还想在每次复制到“临时”文件夹之间暂停几分钟。

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    从变量中删除.gz 后缀并复制具有该名称的文件。

    for f in *.gz
    do
        gunzip "$f"
        cp "${f%.gz}" temp
        sleep 60 # sleep 1 minute
    done
    

    【讨论】:

    • @user13906858 :与您声明的用例相反,您还可以节省空间(和时间),gunzip -c "$f" > temp/"${f%.gz}" 祝您好运。
    • 我打算在我的回答中这样做,但问题是复制,而不是移动。
    • 是的,我同意回答上述问题。我只是想给他们一个他们可能没有想到的选择。祝大家好运!
    【解决方案2】:

    我认为您要做的不是将 *.gz 文件复制到临时目录中。这样对吗? 如果你使用“find”,那可以很好地工作。

    for f in *.gz
    do
     gunzip $f
     mv $(find . -type f -depth 1 \! -name "*.gz") temp
    done
    

    【讨论】:

    • 运行for 循环找到的mv $(find ...*.gz) temp for each .gz` 文件没有任何意义。在处理完循环中的第一个文件后,它们都会被移动。
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2018-04-11
    • 2011-10-09
    • 2018-01-28
    • 2011-11-01
    • 2016-11-19
    相关资源
    最近更新 更多