【发布时间】:2020-12-16 23:15:30
【问题描述】:
需要复制超过 100.000 个文件的列表(没有 .ABC 和 .DEF 扩展名!)。 目前我正在使用 while 结合 /opt/project/ 目录中的 find 命令来生成完整的 PATH 以便我可以复制他们以后。
while read LINE; do find opt/project/TOP3RST_0_/ -name "$LINE"*; done < < TOP3RST_0_file.list > PATH_TOP3RST_0_file.list
这个过程会慢慢来。我想知道是否可以使用 awk、sed 或其他东西从文件列表中创建完整的 PATH。另外,如果我可以检查每个文件是否确实存在,那将是一个奖励。
从此:
BT_SUPR_TOP3RST_0__20200716T004902_20200716T005113_0002 BT_SUPR_TOP3RST_0__20200716T005308_20200716T005352_0002 BT_SUPR_TOP3RST_0__20200716T005653_20200716T005748_0002 BT_SUPR_TOP3RST_0__20200716T005752_20200716T005824_0002 BT_SUPR_TOP3RST_0__20200716T010842_20200716T011051_0002
预期的输出路径应该是这样的:
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T004902_20200716T005113_0002/BT_SUPR_TOP3RST_0__20200716T004902_20200716T005113_0002.ABC
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T004902_20200716T005113_0002/BT_SUPR_TOP3RST_0__20200716T004902_20200716T005113_0002.DEF
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T005308_20200716T005352_0002/BT_SUPR_TOP3RST_0__20200716T005308_20200716T005352_0002.ABC
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T005308_20200716T005352_0002/BT_SUPR_TOP3RST_0__20200716T005308_20200716T005352_0002.DEF
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T005653_20200716T005748_0002/BT_SUPR_TOP3RST_0__20200716T005653_20200716T005748_0002.ABC
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T005653_20200716T005748_0002/BT_SUPR_TOP3RST_0__20200716T005653_20200716T005748_0002.DEF
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T005752_20200716T005824_0002/BT_SUPR_TOP3RST_0__20200716T005752_20200716T005824_0002.ABC
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T005752_20200716T005824_0002/BT_SUPR_TOP3RST_0__20200716T005752_20200716T005824_0002.DEF
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T010842_20200716T011051_0002/BT_SUPR_TOP3RST_0__20200716T010842_20200716T011051_0002.ABC
/opt/project/TOP3RST_0_/2020/07/16/BT_SUPR_TOP3RST_0__20200716T010842_20200716T011051_0002/BT_SUPR_TOP3RST_0__20200716T010842_20200716T011051_0002.DEF
最后我需要计算时间间隔:
BT_SUPR_TOP3RST_0__20200716T003457_20100716T004736_0002.ABC
20200716T003457 = 2020-07-16 00:34:57
20200716T004736 = 2020-07-16 00:47:36
我认为像datediff 这样的东西可以计算出差距吗?
【问题讨论】:
-
Tl;博士,拜托。样本数据是什么,预期的输出是什么?你把我弄丢了,
-
你读过MCVE 吗?也输了。始终尝试简化/缩小问题
-
我有这个权利吗?您的进程有一个文件名,并且只有一个文件名。您不知道该文件在哪里,但完整路径已编码在文件名中。所以你必须解析文件名才能确定它的位置?而且解析太慢了?但是创建该文件的进程必须知道它在哪里?但只传递文件名? 更改创建过程以传递整个路径。 这样文件名就不必重复路径中包含的信息 - 这是无用的冗余。
-
这真的很难读。你能更好地描述你的问题吗?你从哪里读取路径?它是一个文本文件吗?能否也提供完整的 sn-p?
-
"$LINE"*很奇怪,你想要"$LINE*"。This process is going to slowly当然是 - 你正在运行find100000 次...运行 onefind将所有-name .. -o -name othername -o -name anothername etc.。but I need the full PATH to locate为什么?只需添加"$PWD/即可查找参数。不管怎样,你从复制一些文件开始你的帖子。然后你发布了一些find执行命令行。然后您发布了一些需要添加后缀和前缀的行。这一切都有关系吗?您想加快find的速度还是创建一个带有.ABC.DEF扩展名的列表?