通过脚本将旧版本文件移动到另一个文件夹

通过脚本将旧版本文件移动到另一个文件夹

我正在尝试找到一种方法让我的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.pdfaaa-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/”

相关内容