繁体   English   中英

查找文件的模式,使用该模式创建一个文件夹,然后将文件复制到该文件夹​​中-Bash脚本

[英]Find pattern of the file, create a folder with that pattern and copy the files to that folder - Bash script

我有一个任务,要查找文件的模式,使用模式名称创建一个文件夹,然后将文件复制到该文件夹​​。 我能够创建文件夹。


folders=`find /Location -type f -name "*.pdf" -printf "%f\n" | cut -f 1 -d '_' | sort -u`
for i in $folders
do
    mkdir -p /LocationToCreateTheFolder/$i
done

无法进一步说明如何复制文件。

也许尝试?

for i in $folders do mkdir -p /LocationToCreateTheFolder/$i && cp ./$i.pdf ./$i/ 

这将进行查找和复制:

find Location -type f -name '*.pdf' -exec bash -c 'f=${1##*/}; d="LocationToCreateTheFolder/${f%%_*}"; mkdir -p "$d" && cp "$1" "$d"' None {} \;

这对于困难的文件名是安全的,即使文件名中包含空格,制表符或换行符也是如此。

这个怎么运作

  • find Location -type f -name '*.pdf' -exec bash -c '...' None {} \\;

    这将在目录Location下找到pdf文件,对于找到的每个pdf文件,将在$1设置为找到的文件名的情况下执行'...'的bash命令。 $0设置为None 。我们不使用$0

  • f=${1##*/}

    这将从文件名中删除目录名。 这是一个删除前缀的示例: $1之前的所有内容(包括最后一个/都将被删除。

  • d="LocationToCreateTheFolder/${f%%_*}"

    这将创建我们要将文件发送到的目录的名称。

    ${f%%_*}"删除后缀的示例。 $f中第一个_和之后的所有内容都将被删除。

  • mkdir -p "$d" && cp "$1" "$d"

    这样可以确保该目录存在,然后将文件复制到该目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM