我有两个每天接收的文件,我想将它们重命名为 TRN_HIST_TBL.txt 和 TRN_HIST_TBL_NON_NPI.txt

我有两个每天接收的文件,我想将它们重命名为 TRN_HIST_TBL.txt 和 TRN_HIST_TBL_NON_NPI.txt

我有两个每天收到的文件TRN_HIST_TBL_16_AUG_2020TRN_HIST_TBL_NON_NPI_16_AUG_2020我想将它们重命名为TRN_HIST_TBL.txtTRN_HIST_TBL_NON_NPI.txt

我已经编写了如下所示的重命名命令,但它只创建一个文件TRN_HIST_TBL.txt

mv TRN_HIST_TBL* TRN_HIST_TBL.txt

mv TRN_HIST_TBL_NON_NPI* TRN_HIST_TBL_NON_NPI.txt

答案1

您用于第一个文件的 glob 与这两个文件相匹配。这会导致第二个文件覆盖第一个文件。由于文件的命名方式,无法通过通配来避免这种情况。您需要做的是使用整个文件名:

mv TRN_HIST_TBL_16_AUG_2020 TRN_HIST_TBL.txt 

mv TRN_HIST_TBL_NON_NPI_16_AUG_2020 TRN_HIST_TBL_NON_NPI.txt   

答案2

第一个重命名 (mv) 与两个文件匹配,因此第二个重命名会立即覆盖第一个文件。

颠倒顺序不会有帮助。这样,名称较长的文件将被正确重命名,但随后它和另一个文件都将被再次重命名。

附加说明和修复:

您的输入是TRN_HIST_TBL_16_AUG_2020TRN_HIST_TBL_NON_NPI_16_AUG_2020,它们每天都不同,并且您希望日期部分不重要。

因此,当您写入 时mv TRN_HIST_TBL* TRN_HIST_TBL.txt,通配符会匹配两个文件,并且命令会扩展为:

mv TRN_HIST_TBL_16_AUG_2020 TRN_HIST_TBL_NON_NPI_16_AUG_2020 TRN_HIST_TBL.txt

这只是将两个文件命名为TRN_HIST_TBL.txt.

第二个命令失败,因为TRN_HIST_TBL_NON_NPI*现在不匹配任何内容。

如果您以另一种顺序执行这两个命令,TRN_HIST_TBL_NON_NPI*则仅匹配一个文件,并且您会得到

mv TRN_HIST_TBL_NON_NPI_16_AUG_2020 TRN_HIST_TBL_NON_NPI.txt

这很好,除了另一个命令仍然匹配两个名称,并将两个文件重命名为TRN_HIST_TBL.txt

您需要隐藏其中一个文件,同时重命名另一个文件,并且它需要是更独特的名称。

#.. Will only rename one file.
mv TRN_HIST_TBL_NON_NPI* Hide_TRN_HIST_TBL_NON_NPI.txt
#.. Wildcard will not match that file.
mv TRN_HIST_TBL* TRN_HIST_TBL.txt
#.. Set the final name.
mv Hide_TRN_HIST_TBL_NON_NPI.txt TRN_HIST_TBL_NON_NPI.txt

相关内容