![如何在目录中找到匹配文件的部分并从目录中删除匹配的文件?](https://linux22.com/image/125339/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%89%BE%E5%88%B0%E5%8C%B9%E9%85%8D%E6%96%87%E4%BB%B6%E7%9A%84%E9%83%A8%E5%88%86%E5%B9%B6%E4%BB%8E%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%88%A0%E9%99%A4%E5%8C%B9%E9%85%8D%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个名为solution.txt的文件。我需要检查当前目录中是否存在这样的文件。如果存在,则删除该文件并将其替换为(solution.txt)
示例:在我的目录中: wer.txt wer1.txt wer2.txtsolution1.txtsolution23.txtsolution32.txt
我需要从目录中删除所有以“solution”开头、以txt结尾的文件,并将其替换为solution.txt。
请给出shellscript解决方案。
答案1
您可以尝试并适应删除所有solution...txt文件,但不删除solution.txt(如果存在):
find . -type f -name "solution[0-9]*.txt" -exec rm -f {} \;
但不能有多个文件名solution.txt
答案2
也许不是你问的问题,但这是我的答案:
首先,您需要找到您正在寻找的那些:
find /file/where/you're/looking/at -name solution | grep txt
找到它们后,您可以使用以下方法删除它们:
rm thename23.txt thename34.txt
或者将它们合并(如果您想完全替换它们,则仅使用一个>
):
cat thename23.txt >> thename34.txt
您还可以使用命令-exec
的选项find
。更多信息这里。
问候
答案3
您没有定义“用solution.txt替换它们”的含义,但由于您想首先删除其他解决方案文件,我想假设您在某处有替换文件,否则这个问题没有多大意义。
我认为最简单的方法是
rm solution[0-9]*.txt >/dev/null && cp /from/somewhere/solution.txt .
这会尝试删除这些文件,如果成功,则会将solution.txt复制到您的工作目录。换句话说:您保证之后要么根本没有解决方案文件,要么只有一个名为solution.txt的解决方案文件。
请注意,这也会删除名为solution5x.txt 的文件。我不知道这对你来说是否可以接受。如果这是一个问题,您需要使用正则表达式来匹配文件名,例如使用find ... -regex
.