linux - 一个 liner shell 脚本,用于按日期重组文件

标签 linux shell

我有一个文件夹,里面有很多按日期命名的文件,如下所示:

(Some numbers)-date-(somenumbers).filet ype

“日期”的列出方式如下:

20150730225001 2015 年 7 月 30 日在 0 10:50(还有 1 秒)

有没有一种快速的方法可以使用 Ubuntu 终端来组织它以提供如下结构:

当前文件夹/年/月/日/时/(所有符合条件的文件都放在这里)

我曾尝试为此寻找解决方案,但大多数都让我感到困惑,因为我是 Unix 脚本编写的新手。

最佳答案

所以在 foo/ 中有这两个文件

42-20150730225001-473826.filet
98-20141115180001-482157.filet

您可以使用此 Perl 脚本:

#!/usr/bin/perl
for(@ARGV) {
   if (/.*-(\d{4})(\d\d)(\d\d)(\d+)-.*[.]filet/) {
       `mkdir -p $1/$2/$3/ && mv $_ $1/$2/$3/$4.filet`;
   }
}

或者这个单行本:

ls | xargs perl -e 'for(@ARGV){qx{mkdir -p $1/$2/$3/ && mv $_ $1/$2/$3/$4.filet} if /.*-(\d{4})(\d\d)(\d\d)(\d+)-.*[.]filet/}'

关于linux - 一个 liner shell 脚本,用于按日期重组文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777964/

相关文章:

linux - AWS EC2 中的内存分区

linux - “For”循环并在 Bash 脚本中休眠

java - Java 运行时不支持编码 'UTF-8'

java - 如何安装 JAVA 8 Debian 8

c++ - 将参数从 Qt 传递到 shell 脚本文件

linux - 如何知道要使用什么脚本头以及它为什么重要?

shell - sed 可以忽略输入文件的一部分吗?

linux fifo,当read peer返回时,write peer也会立即返回?

linux - erreur commande 剪切脚本 shell

python - Psycopg2 操作错误 : could not connect to server : No such file or directory