【问题标题】:a simple copy files based on names into two directory with bash使用 bash 将基于名称的文件简单复制到两个目录中
【发布时间】:2020-05-12 13:39:33
【问题描述】:

我有一个目录,其中包含很多具有这种模式的文件:

part=2020-05-01
part=2020-05-02
part=2020-05-03
.
.
.

现在我想编写一个 bash 脚本,在这个脚本的中间,我想根据特定的日期时间将所有这些文件复制到两个目录中。

例如,我想将2020--03-10之前的所有文件复制到folder1,并将其他文件复制到folder2

完成这项工作的最简单方法是什么?

【问题讨论】:

    标签: linux bash copy


    【解决方案1】:

    给定:

    $ ls -1
    part=2020-02-03
    part=2020-03-02
    part=2020-03-15
    part=2020-05-01
    part=2020-05-02
    part=2020-05-03
    

    文件名的日期部分看起来像ISO 8601 的形式,因此可以按字典顺序进行比较(作为字符串)。

    使用glob(而不是尝试解析ls),在= 上拆分文件名并使用字符串比较与截断值进行比较:

    cut="2020-03-10"
    for fn in part=*; do 
        if [[ "${fn#*=}" < "$cut" ]]; then 
              #  ^       split the filename on '='
            echo "$fn => dir 1"
            # instead of echoing -- you would mv "$f" "new_path 1"
        else
            echo "$fn => dir 2"
            # again -- replace with the mv you want
        fi      
    done
    

    打印出来:

    part=2020-02-03 => dir 1
    part=2020-03-02 => dir 1
    part=2020-03-15 => dir 2
    part=2020-05-01 => dir 2
    part=2020-05-02 => dir 2
    part=2020-05-03 => dir 2
    

    你应该可以从那里拿走它!

    【讨论】:

    • 好像没问题。就像你说的那样,当我替换 move 而不是 echo 时,它会将所有文件复制到嵌套的第一个文件夹中。
    • 您只需要用正确的引用和正确的路径找出mv
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2017-12-11
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多