查找文件的模式,使用该模式创建文件夹并将文件复制到该文件夹​​ - Bash脚本

时间:2016-06-30 20:50:31

标签: linux bash file copy

我有一项任务,找到文件的模式,创建一个带有模式名称的文件夹,然后将文件复制到该文件夹​​。我可以创建文件夹。

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

无法进一步了解如何复制文件。

2 个答案:

答案 0 :(得分:0)

也许试试?

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

答案 1 :(得分:0)

这将进行查找和复制:

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 '...'无{} \;

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

  • f=${1##*/}

    这将从文件名中删除目录名称。这是前缀删除的示例:$1中包含最后/的所有内容都已删除。

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

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

    ${f%%_*}"后缀删除的示例。 <{1}}之后的所有内容都会被删除。

  • $f

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