我正在尝试找到一种方法让我的cmd脚本浏览我的文件夹,在文件夹中找到旧版本的pdf文档并将它们移动到另一个名为旧版本的文件夹。
我遇到的问题是文件名随版本而变化。 IE DE-321-DLS-R04.pdf 已变为 DE-321-DLS-R05.pdf
我不知道从哪里开始。我见过使用日期但文件名不同的脚本。
请帮忙。
答案1
也许是这样的:
find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' | xargs mv -t "older versions"
解释:
find . -name 'DE-321-DLS-R*.pdf'
列出当前目录中以DE-321-DLS-R
.sort -r
对文件列表进行排序撤销命令。sed '1 d'
输出除第一行之外的所有输入行。xargs mv -t "older versions"
mv
使用上一个sed
命令的输出作为参数进行调用,并告知mv
将所有参数移动到目录older versions
。
例子:
$ ls -1
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
DE-321-DLS-R05.pdf
$ mkdir "older versions"
$ find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' |
xargs mv -t "older versions"
$ ls -1
DE-321-DLS-R05.pdf
older versions
$ ls -1 "older versions"
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
答案2
生成一些测试文档:
$ mkdir temp
$ cd temp
$ touch aaa-R00.pdf aaa-R01.pdf aaa-R02.pdf bbb-R19.pdf bbb-R20.pdf
$ ls | sort -r
bbb-R20.pdf
bbb-R19.pdf
aaa-R02.pdf
aaa-R01.pdf
aaa-R00.pdf
看!BBB-R20.pdf和aaa-R02.pdf是最新版本,其他版本应该移动。
将此脚本复制粘贴到您的终端,将过时文档标记为“过时”
for doc in $(ls | grep 'R[0-9][0-9].pdf$' | sort -r); do
name=${doc%%[0-9][0-9].pdf}
if [[ "$name" != "$last" ]]; then
echo $doc latest
else
echo $doc outdate
fi
last=$name
done
结果:
bbb-R20.pdf latest
bbb-R19.pdf outdate
aaa-R02.pdf latest
aaa-R01.pdf outdate
aaa-R00.pdf outdate
对于您的问题,您可以将“echo $doc outdate”替换为“mv $doc path/to/outdate/”