保留给定文件模式的目录中的最新文件集

时间:2018-06-04 15:23:32

标签: bash shell sed ftp

我在ftp文件夹中有多组文件,每组包含一个文本和一个标记文件。 在这里,我需要根据到达时间从给定目录中获取具有以下文件模式的最新文件集。

文件格式:

<FileName>_<FileID>_<Date>_<TimeStamp>.csv
<FileName>_<FileID>_<Date>_<TimeStamp>.mrk

File1在不同时间有三组:

file1_123_20180306_654321.csv
file1_123_20180306_654321.mrk

file1_123_20180306_866321.csv
file1_123_20180306_866321.mrk

file1_123_20180306_976321.csv
file1_123_20180306_976321.mrk

File2在不同时间有两套:

file2_456_20180306_277676.csv
file2_456_20180306_277676.mrk

file2_456_20180306_788988.csv
file2_456_20180306_788988.mrk

如果它是单个文件,我可以执行以下命令,但如果是一组我需要帮助。

ls -t *123*.mrk | head -1
ls -t *123*.csv | head -1

我只需保留最新的文件集(来自file1和file2),并将其他文件移到另一个文件夹中。

预期产出:

file1_123_20180306_976321.csv
file1_123_20180306_976321.mrk
file2_456_20180306_788988.csv
file2_456_20180306_788988.mrk

我如何使用shell或python2.6执行此操作?任何帮助深表感谢。 如果这个问题已经存在或多或少的确切答案,请指出。

1 个答案:

答案 0 :(得分:2)

您可以使用此awk从两个文件中获取每组的最新文件条目:

printf '%s\0' *_*_*_*.csv *_*_*_*.mrk |
awk -v RS='\0' -v ORS='\0' -F '[_.]' 'NF{a[$1,$2,$3,$NF]=$0}
   END{for (i in a) print a[i]}' |
xargs -0 -I {} echo mv '{}' /dest/dir

<强>输出:

mv file2_456_20180306_788988.csv /dest/dir
mv file1_123_20180306_976321.mrk /dest/dir
mv file1_123_20180306_976321.csv /dest/dir
mv file2_456_20180306_788988.mrk /dest/dir

如果对输出感到满意,可以在echo命令之前删除mv,将这些文件移动到目标目录中。