欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell|实现对指定时间内文件的批量操作

程序员文章站 2022-07-05 10:59:30
...

我的某个目录有以下文件:

$ ls
00d112a9-c4a4-56f2-b367-7298a852923f  5c926099-7c9e-5d6c-afd4-20d7f3afd2ed  b8a70b42-8ccb-5e65-a7ad-790512429129  f00c74f0-8fd4-582f-ac90-3e257fc338b7
01ebbb29-f4fe-54ba-a81d-99d64d8c31ba  6505d36c-9011-5eb3-a869-7f7d648cd662  ca014620-ab20-5798-ba0b-89c7b8da3ef7  f0f86477-fa40-52f4-b71b-d081a39a6b37
065ec0ee-85c5-5e4a-b713-1deea86d0db1  6946e713-9e0c-5734-8e18-b3771839375e  cde17a66-7968-5753-8b59-5921fde5e703  f5fc35f9-f78c-5c68-ad12-f2dfbc4b1f0c
2700f155-751c-5702-861d-04bae220a72d  757c3ade-b04b-59f4-ae7a-f194cb990b7a  d2e69c2e-4bb2-5dae-a9c7-86a888b11b7f  f78bd60b-a05c-59dd-b938-d76912c4104d
2a6fe243-39b5-5553-af04-6768877db9f4  7f3a7814-5dac-5acb-9d77-856afe5f867e  d912a28d-4bb9-55e1-851a-99aef2c72bff  fd72fb30-ad56-52b2-b1c1-10692ec1248b
2ee5e4c2-b84e-5740-af3d-46528ab8ccd0  8310fee5-18ea-5306-8c0e-bd48500c3795  da83c01c-3ed0-5100-929a-b1250f374108  fecbcbe1-5e1a-5d73-a9f6-da6b48283b4d
32b7df2f-de6c-578b-9f1d-e42789d90588  911d443a-1d59-52ae-9d63-6f103eb4d217  dcfffce3-27c5-5885-a142-4c1db3c9c621  icgc-get-ID
33d28b7f-f0c5-58cd-9f73-f4c7dbe6cc24  94dca9ba-88e1-5ae8-a21c-c2bad8bc9f79  dee0bd94-3d75-561f-88c9-074f75a3b3ca  manifest.pdc.brca.sh
37fa1a63-4b28-5ee8-abfb-ea4ca0ea6c8e  996401cb-f297-5264-9929-a28e72c6f13a  download_tcga_prad_WGS.pbs            manifest.pdc.prad.sh
39e70769-18dc-51d1-b2ad-e7da1443e7b2  aaeadda6-3ce9-5726-9f26-c2dae115aa26  download_tcga_prad_WGS.pbs.o305047
3c500ad6-2db0-5a00-83c3-62fdebd44459  ac1b48a8-40a9-59e8-b2f5-db08b2efc525  e5b3feb9-58dc-5a41-b3be-f3c4aaefe17d
40c99cd5-9850-5128-a3ef-a006721c2f48  b3f04f3a-5260-534e-9480-7d1ca5c7bce0  e8b15611-86fa-58d8-9a8e-d96ce1f6127e

看起来像一堆乱码的文件其实是非常重要的数据文件,我把它下载到该目录下后发现它应该属于某个特定的子目录,现在这样看起来太乱了。那么就得想办法把这些文件区分出来,然后mv移动到一个子目录下去。

进一步查看更详细的信息,发现它们上一次的修改时间都是2016年!而其他文件我很清楚是我最近新建的。

$ ll | wc -l
46
$ ll 
总用量 4986280179
-rw-rw-r-- 1 liuxs liuxs 100546153647 8月   6 2016 00d112a9-c4a4-56f2-b367-7298a852923f
-rw-rw-r-- 1 liuxs liuxs 111069577771 8月   3 2016 01ebbb29-f4fe-54ba-a81d-99d64d8c31ba
-rw-rw-r-- 1 liuxs liuxs 179708610953 8月   4 2016 065ec0ee-85c5-5e4a-b713-1deea86d0db1
-rw-rw-r-- 1 liuxs liuxs 156471582510 7月  31 2016 2700f155-751c-5702-861d-04bae220a72d
-rw-rw-r-- 1 liuxs liuxs 102866933926 8月  10 2016 2a6fe243-39b5-5553-af04-6768877db9f4
-rw-rw-r-- 1 liuxs liuxs  91212229333 8月   9 2016 2ee5e4c2-b84e-5740-af3d-46528ab8ccd0
-rw-rw-r-- 1 liuxs liuxs  84096730065 8月   8 2016 32b7df2f-de6c-578b-9f1d-e42789d90588
-rw-rw-r-- 1 liuxs liuxs 114306165548 7月  30 2016 33d28b7f-f0c5-58cd-9f73-f4c7dbe6cc24
-rw-rw-r-- 1 liuxs liuxs 149158275176 8月   5 2016 37fa1a63-4b28-5ee8-abfb-ea4ca0ea6c8e
-rw-rw-r-- 1 liuxs liuxs  97144931362 7月  26 2016 39e70769-18dc-51d1-b2ad-e7da1443e7b2
-rw-rw-r-- 1 liuxs liuxs 102237285883 8月  24 2016 3c500ad6-2db0-5a00-83c3-62fdebd44459
-rw-rw-r-- 1 liuxs liuxs  99142561853 8月   2 2016 40c99cd5-9850-5128-a3ef-a006721c2f48
-rw-rw-r-- 1 liuxs liuxs 175486514350 8月  10 2016 5c926099-7c9e-5d6c-afd4-20d7f3afd2ed
-rw-rw-r-- 1 liuxs liuxs 175552227280 7月  29 2016 6505d36c-9011-5eb3-a869-7f7d648cd662
-rw-rw-r-- 1 liuxs liuxs 155743595213 7月  30 2016 6946e713-9e0c-5734-8e18-b3771839375e
-rw-rw-r-- 1 liuxs liuxs  81199018225 8月   5 2016 757c3ade-b04b-59f4-ae7a-f194cb990b7a
-rw-rw-r-- 1 liuxs liuxs 148677243873 8月  10 2016 7f3a7814-5dac-5acb-9d77-856afe5f867e
-rw-rw-r-- 1 liuxs liuxs 110467383562 8月  23 2016 8310fee5-18ea-5306-8c0e-bd48500c3795
-rw-rw-r-- 1 liuxs liuxs 138421863845 8月   2 2016 911d443a-1d59-52ae-9d63-6f103eb4d217
-rw-rw-r-- 1 liuxs liuxs 137443754891 8月   4 2016 94dca9ba-88e1-5ae8-a21c-c2bad8bc9f79
-rw-rw-r-- 1 liuxs liuxs  98537989718 8月   1 2016 996401cb-f297-5264-9929-a28e72c6f13a
-rw-rw-r-- 1 liuxs liuxs 215234949069 8月  11 2016 aaeadda6-3ce9-5726-9f26-c2dae115aa26
-rw-rw-r-- 1 liuxs liuxs  88523081896 8月   6 2016 ac1b48a8-40a9-59e8-b2f5-db08b2efc525
-rw-rw-r-- 1 liuxs liuxs 148515422682 7月  24 2016 b3f04f3a-5260-534e-9480-7d1ca5c7bce0
-rw-rw-r-- 1 liuxs liuxs 151610623269 7月  24 2016 b8a70b42-8ccb-5e65-a7ad-790512429129
-rw-rw-r-- 1 liuxs liuxs 182366112150 8月   8 2016 ca014620-ab20-5798-ba0b-89c7b8da3ef7
-rw-rw-r-- 1 liuxs liuxs  93869793148 7月  25 2016 cde17a66-7968-5753-8b59-5921fde5e703
-rw-rw-r-- 1 liuxs liuxs 133240390236 7月  26 2016 d2e69c2e-4bb2-5dae-a9c7-86a888b11b7f
-rw-rw-r-- 1 liuxs liuxs 112197647128 7月  24 2016 d912a28d-4bb9-55e1-851a-99aef2c72bff
-rw-rw-r-- 1 liuxs liuxs  92331491021 7月  28 2016 da83c01c-3ed0-5100-929a-b1250f374108
-rw-rw-r-- 1 liuxs liuxs  98878614557 8月  11 2016 dcfffce3-27c5-5885-a142-4c1db3c9c621
-rw-rw-r-- 1 liuxs liuxs 154476805942 8月   3 2016 dee0bd94-3d75-561f-88c9-074f75a3b3ca
-rw-rw-rw- 1 liuxs liuxs          392 11月 27 10:33 download_tcga_prad_WGS.pbs
-rw------- 1 liuxs liuxs   1337837821 11月 30 03:10 download_tcga_prad_WGS.pbs.o305047
-rw-rw-r-- 1 liuxs liuxs 139985674871 8月   1 2016 e5b3feb9-58dc-5a41-b3be-f3c4aaefe17d
-rw-rw-r-- 1 liuxs liuxs 100818451042 8月   3 2016 e8b15611-86fa-58d8-9a8e-d96ce1f6127e
-rw-rw-r-- 1 liuxs liuxs  91913138214 8月  17 2016 f00c74f0-8fd4-582f-ac90-3e257fc338b7
-rw-rw-r-- 1 liuxs liuxs 154902140155 8月   2 2016 f0f86477-fa40-52f4-b71b-d081a39a6b37
-rw-rw-r-- 1 liuxs liuxs  95251528382 8月   4 2016 f5fc35f9-f78c-5c68-ad12-f2dfbc4b1f0c
-rw-rw-r-- 1 liuxs liuxs 149602328836 8月   6 2016 f78bd60b-a05c-59dd-b938-d76912c4104d
-rw-rw-r-- 1 liuxs liuxs 153827147765 7月  28 2016 fd72fb30-ad56-52b2-b1c1-10692ec1248b
-rw-rw-r-- 1 liuxs liuxs 137577070586 7月  30 2016 fecbcbe1-5e1a-5d73-a9f6-da6b48283b4d
-rw-rw-r-- 1 liuxs liuxs           77 11月 27 09:59 icgc-get-ID
-rw-r--r-- 1 liuxs liuxs        29399 11月 27 12:37 manifest.pdc.brca.sh
-rw-r--r-- 1 liuxs liuxs         6791 11月 27 10:26 manifest.pdc.prad.sh

于是我想到了使用find命令加并行处理parallel(xargs也是也可以的)再用mv搞定。

$ mkdir prad-us
$ find . -mtime +20 -type f | parallel mv {} ./prad-us/
$ ls
download_tcga_prad_WGS.pbs  download_tcga_prad_WGS.pbs.o305047  icgc-get-ID  manifest.pdc.brca.sh  manifest.pdc.prad.sh  prad-us

这里最重要的是

find . -mtime +20 -type f | parallel mv {} ./prad-us/

需要了解linux 文件的几种时间 (以 find 为例):

  • atime 最后一次访问时间, 如 ls, more 等, 但 chmod, chown, ls, stat 等不会修改些时间, 使用 ls -utl 可以按此时间顺序查看;
  • ctime 最后一次状态修改时间, 如 chmod, chown 等状态时间改变但修改时间不会改变, 使用 stat file 可以查看;
  • mtime 最后一次内容修改时间, 如 vi 保存后等, 修改时间发生改变的话, atime 和 ctime 也相应跟着发生改变.

我使用find . -mtime +20 -type f找出当前目录20天以前修改的文件,然后并行执行mv命令,{}会替换为find命令找到的文件。

这里的mv命令可以替换为任何你想要对find找到文件的操作,这波技能Get没?

更多关于按时间查找文件的例子可以参考Linux 查找某时间段内的所有文件