如何在目录中找到匹配文件的部分并从目录中删除匹配的文件?

如何在目录中找到匹配文件的部分并从目录中删除匹配的文件?

我有一个名为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.

相关内容