shell 如何使用bash脚本串行传输文件?

wqlqzqxt  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(136)

文件有两种类型

1.第一册_20190715_1A.gz,
1.第一册_20190715A.gz,
1.第二册_20190716_1A.gz,

  1. Book2_20190716A.gz
    这里,2019年是07年是月份,15年是日期,也是16年。这里还有两种类型的文件_1A和A。

需要在文件夹中按日期传输。还需要为不同类型的文件(如_1A & A)传输不同的文件夹

如果我grep喜欢***_1A**,那么它会传输_1A文件夹,但是如果*A,那么它也会传输A _1A。

What I do now. Please Help me.
kr98yfug

kr98yfug1#

你的问题不是很清楚,但这正是我想你要找的:

#!/bin/bash

touch Book1_20190715_1A.gz
touch Book1_20190715A.gz
touch Book2_20190716_1A.gz
touch Book2_20190716A.gz

find . -type f -name "Book*" -print0 | while IFS= read -r -d '' file
do
    # Remove "Book1_"
    tempdirname=${file#*_}
    # Remove ".gz"
    dirname=${tempdirname%\.*}
    echo "$dirname"
    if [[ ! -d "$dirname" ]]
    then
        mkdir "$dirname"
    fi
    /bin/mv "$file" "$dirname"
done
  • find列出所有名为Book*的文件,并将该列表发送到while循环。
  • 从文件名中,使用变量扩展来提取目录名。2首先删除“Book1_",然后删除“.gz”。3这样就剩下了日期和“_1A”部分(如果有的话)。
  • 然后创建该目录(如果该目录不存在)。
  • 将文件移动到目录。

相关问题