我的文件夹中有很多文件(File Format: ABC_YYYYMMDD.TXT
)。
- ABC_20150101.TXT
- ABC_20150201.TXT
- ABC_20150301.TXT
- ABC_20150501.TXT
我需要输出如下。
- ABC_20150101.TXT - Moved to a folder name ARCHV in current path.
- ABC_20150201.TXT - Moved to a folder name ARCHV in current path.
- ABC_20150301.TXT - Moved to a folder name ARCHV in current path.
- ABC_20150501.TXT - Kept in the current path, since it is latest.
这是保存在当前文件夹中的最新文件。但是其他文件将被移动到名为/ARCHV
的当前工作目录中的另一个文件夹中。
请让我知道UNIX
语句执行任务。
感谢
答案 0 :(得分:3)
这是一个快速解决方案,它依赖于一些已安装的程序:
$ find -maxdepth 1 -type f -iname 'ABC*.TXT' -printf '%T@|%p\n' | sort -r -n | tail -n +2 | cut -d'|' -f2 | xargs -i mv {} ARCHV
find
打印带有前缀unix时间戳的文件名sort
按时间戳排序tail
删除第一个(最近的文件)cut
仅获取文件名(删除时间戳)xargs mv
移动文件答案 1 :(得分:1)
ls -1|awk 'p{printf "mv %s /archive\n",$0}{p=$0}'|sh
ABC_....
个文件ls
将按名称对列表进行排序。|sh
将看到该命令生成的输出。如果一切正常,添加|sh
将使这些命令执行mv %s
更改为mv \"%s\"
/archive
,您可以将其更改为正确的档案。