Linux批量根据文件名模式将文件复制到目录中

Mar*_*one 2 linux bash shell awk sed

我有一个近500个pdf文件的列表,其文件结构如下:

XXXX-YYYY-MM-DD.pdf
Run Code Online (Sandbox Code Playgroud)

其中XXXX一个变量长度数字代码(1到4位)总是用" - "分隔,例如:

51-2016-08-22.pdf
776-2016-08-22.pdf
3881-2016-08-22.pdf
4-2016-08-22.pdf
2860-2016-08-22.pdf
Run Code Online (Sandbox Code Playgroud)

目标是将每个文件复制到自己的目录中,命名模式之类的目录(即:文件776-2016-08-22.pdf转到目录776).如何使用awk或sed来分隔变量长度字段?

这是我的代码:

for f in *.pdf

    do
        FOLDERNAME=`echo $f| awk (awk or sed missing code here)`
        mkdir /my/dir/structure/$FOLDERNAME
        cp $f /my/dir/structure/$FOLDERNAME/
    done
Run Code Online (Sandbox Code Playgroud)

感谢您的支持.

anu*_*ava 5

您可以使用:

for f in *.pdf; do
    d="${f%%-*}"
    mkdir -p "$d" && cp "$f" "$d"
done
Run Code Online (Sandbox Code Playgroud)

  • 为了使用年份部分创建目录,我建议使用这样的BASH正则表达式:**`for f in*.pdf; do [[$ f =〜^ [^ - ] + - ([0-9] {4}) - ]] && echo mkdir -p"$ {BASH_REMATCH [1]}"; echo cp"$ f""$ d"; done`** (2认同)