我有一项任务,找到文件的模式,创建一个带有模式名称的文件夹,然后将文件复制到该文件夹。我可以创建文件夹。
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
无法进一步了解如何复制文件。
答案 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
这确保该目录存在,然后将文件复制到该目录。