使文件序列最低

时间:2017-03-14 11:12:57

标签: shell unix

你能帮我看看如何编写shell脚本吗

我有以下文件集 文件夹路径: abc/xyz

abc122.1001.csv
abc122.1002.csv
abc122.1003.csv

我想在文件夹位置搜索abc122。*文件,并将所有文件移到另一个位置,但序列号最小的文件除外(1001,1002 ...)

例如:abc122.1001.csv是最低的序列文件,所有其他带有abc122 *的文件都必须移动到另一个位置。

我已尝试过以下命令,但它无法正常工作

find /abc/xyz -name 'abc122*' |sort -r | tail -n1 |  mv {} u05/BACKUP/OLD

2 个答案:

答案 0 :(得分:1)

这可以作为一个起点:

move_all_but_one.sh

#!/bin/bash

shift

if [ $# -gt 0 ]; then
        mv $@ u05/BACKUP/OLD/
fi

比跑吧:

./move_all_but_one.sh abc122*

但仍然不是最终解决方案,因为它可能会因很长的文件列表而崩溃(参数列表太长)。

答案 1 :(得分:0)

语法{}适用于find的exec命令,不适用于mv,也不适用于shell。 用

替换| mv ...
| while read f; do mv "$f" u05/BACKUP/OLD; done

应该有所帮助,不是吗?

| sort -r | tail -n 1可以替换为| sort | tail -n +2