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

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

$ 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 查找某时间段内的所有文件。

你可能感兴趣的:(shell|实现对指定时间内文件的批量操作)