Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用UNIX Shell脚本保留最新文件并将旧文件移动到文件夹中_Shell_Unix - Fatal编程技术网

使用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
  • find
    打印带有前面unix时间戳的文件名
  • 排序
    按时间戳对其排序
  • 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不是空的