我在一个文件夹中有数百万个 xml 文件。文件的名称遵循特定的模式:
ABC_20190101011030931_6049414.xml
在这我只对 xml 之前的最后一组数字感兴趣6049414
。我在一个文本文件中有一个大约 8000 个这样的数字的列表。文本文件中的详细信息如下 - 一行中的数字:
104638
222885
108880071
我正在使用以下代码从与文本文件中给出的数字匹配的文件夹中移动文件:
#folder where the xml files are stored
cd /home/iris/filesToExtract
SECONDS=0
#This line reads each number in the hdpvr.txt file and if a match is found moves that file to another folder called xmlfiles.
nn=($(cat /home/iris/hdpvr.txt));for x in "${nn[@]}";do ls *.xml| grep "$x"| xargs -I '{}' cp {} /home/iris/xmlfiles;done
#this line deletes all the other xml files from filesToExtract folder
find . -name "*.xml" -delete
echo $SECONDS
我面临两个问题。1 尽管有匹配项,但某些文件没有移动 2. 即使在文件名的中间部分找到匹配项,例如
from this ABC_20190101011030931_6049414.xml -> this 20190101011030931
如果找到匹配项,它仍然会移动....如何获得精确匹配项并移动文件。
另一个解决方案,感谢glenn jackmann!
模式
*_*_${line}.xml
用于查找目录中的文件。如果要立即删除剩余的 xml 文件,请替换
rm -i *.xml
为。rm *.xml
这样的事情能胜任吗?
您也可以使用 mv 以残酷的方式执行此操作,但如果找不到文件,它将引发错误