我有一个任务,要找到文件的模式,用模式名称创建一个文件夹,并将文件复制到该文件夹。我可以创建文件夹。
folders=`find /Location -type f -name "*.pdf" -printf "%fn" | 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 '...'
无{}\;这将在目录
Location
下找到pdf文件,对于找到的每个文件,'...'
内的bash命令将在$1
设置为找到的文件名的情况下执行。($0
设置为None
。我们不使用$0
。(f=${1##*/}
这将从文件名中删除目录名。这是前缀删除的一个示例:
$1
中的所有内容(包括最后一个/
(都将被删除。d="LocationToCreateTheFolder/${f%%_*}"
这将创建要将文件发送到的目录的名称。
${f%%_*}"
是后缀删除的一个示例。从第一个CCD_ 14及其后的CCD_。mkdir -p "$d" && cp "$1" "$d"
这样可以确保目录存在,然后将文件复制到其中