【发布时间】:2020-05-12 13:39:33
【问题描述】:
我有一个目录,其中包含很多具有这种模式的文件:
part=2020-05-01
part=2020-05-02
part=2020-05-03
.
.
.
现在我想编写一个 bash 脚本,在这个脚本的中间,我想根据特定的日期时间将所有这些文件复制到两个目录中。
例如,我想将2020--03-10之前的所有文件复制到folder1,并将其他文件复制到folder2。
完成这项工作的最简单方法是什么?
【问题讨论】:
我有一个目录,其中包含很多具有这种模式的文件:
part=2020-05-01
part=2020-05-02
part=2020-05-03
.
.
.
现在我想编写一个 bash 脚本,在这个脚本的中间,我想根据特定的日期时间将所有这些文件复制到两个目录中。
例如,我想将2020--03-10之前的所有文件复制到folder1,并将其他文件复制到folder2。
完成这项工作的最简单方法是什么?
【问题讨论】:
给定:
$ 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
你应该可以从那里拿走它!
【讨论】:
mv。