【问题标题】:Read filename from list file, compress it and move to destination using bashscript从列表文件中读取文件名,将其压缩并使用 bash 脚本移动到目标位置
【发布时间】:2022-01-18 11:34:16
【问题描述】:

我在一个目录 (/int/source/HR100) 中有一个列表文件和一个源文件。所以 Source 目录的内容如下所示。

Customer_Account_20211202.csv Customer_Account.lst

列表文件 (Customer_Account.lst) 包含源文件的名称,即 Customer_Account_20211202.csv。现在我想压缩源文件并将其移动到目标目录(/int/source/HR100/Archive)。我可以使用如下所示的单行 unix 命令实现移动,但我无法压缩和移动文件。我的偏好是 Gunzip(.gz) 格式。请帮忙。

我正在使用的代码:

xargs -a Customer_Account.lst mv -t int/source/HR100/Archive;

上面的一行在不压缩的情况下移动文件。我想要一个可以从 list 读取文件,压缩然后移动的衬垫。

【问题讨论】:

  • 文件Customer_Account.lst 是否只包含一行(一个文件名)?
  • 是的,它只包含一个文件名。

标签: bash shell unix


【解决方案1】:

假设 Customer_Account.lst 只包含一行,这个命令应该可以完成这项工作:

f=$(< Customer_Account.lst); gzip "$f" && mv "$f".gz int/source/HR100/Archive/

【讨论】:

    【解决方案2】:

    您可以使用xargs 和sh 来执行多个命令。

    xargs -a Customer_Account.lst -i sh -c "gzip {};mv {}.gz -t int/source/HR100/Archive;"
    

    【讨论】:

    • 谢谢你,你能告诉我是否可以重命名文件并移动?如果 Customer_Account.lst 包含“DEM_Customer_Account_14122021111209_RC101.csv”。我如何将其移动到目标为“DEM_Customer_Account_14122021111209.csv”,我只需要在 _RC 之后删除所有内容并附加 .csv。非常感谢您的帮助。
    【解决方案3】:

    为什么是一个班轮?怎么样...(未测试)

    while IFS= read -r file || [ -n "$file" ]; do
      printf '%s\n' "Doing file '$file'"
    
      tar -czf "$file.tar.gz" "$file"
      mv -- -t 'int/source/HR100/Archive' "$file.tar.gz"
    done < 'Customer_Account.lst'
    

    while ... do ... done循环中的第一行逐行读取文件

    • 有关[ -n "$file" ] 的问题,请参阅this

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2019-04-08
      相关资源
      最近更新 更多