使用UNIX Shell脚本保留最新文件并将旧文件移动到文件夹中
我的文件夹中有许多文件(使用UNIX Shell脚本保留最新文件并将旧文件移动到文件夹中,shell,unix,Shell,Unix,我的文件夹中有许多文件(文件格式: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
文件格式: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
语句。
谢谢这里有一个快速解决方案,它依赖于一些已安装的程序:
$ 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
打印带有前面unix时间戳的文件名find
按时间戳对其排序排序
删除第一个(最近的文件)tail
仅获取文件名(删除时间戳)cut
移动文件xargs mv
- 又快又脏:
ls -1|awk 'p{printf "mv %s /archive\n",$0}{p=$0}'|sh
- 在包含这些
文件的目录下测试此行ABC...
如果没有任何排序选项,将按名称对列表进行排序ls
- 将结果导入awk,跳过最后一行(文件)
- 删除结尾
将看到命令生成的输出。如果一切正常,添加| sh
将执行这些命令|sh
- 我看到您的示例文件名没有空格。如果它们确实包含空格,请将
更改为mv%s
mv\%s\”
- 我的一行程序中的目标归档文件名为
,您可以将其更改为正确的归档文件/archive
-r
标志添加到排序
中,对吗?或者你将把所有最新的(留下最旧的)文件移到ARCHV?曼纽尔:我感谢你的努力。但是代码给了我一些错误。这段代码可以和Korn Shell一起使用吗?@Manuel:我已经更改了下面的代码,错误已经消失了<代码>查找ABC*.TXT | sort-r-n | tail+2 | cut-d'|'-f2 | xargs-i mv{}ARCHV感谢代码。'p{printf..}'-前面的p将做什么?@Sadhun简而言之:如果p不是空的