我正在尝试删除名称中带有空格的所有文件。我正在使用以下命令。但这给了我一个错误
命令 :ls | egrep '. ' | xargs rm
在这里,如果我仅使用ls | egrep '. '
命令,它会为我提供文件名中带有空格的所有文件名。但是当我尝试将输出传递给 rm 时,所有空格(前导或尾随)都被删除。所以我的命令没有得到正确执行。
有关如何删除名称中至少有一个空格的文件的任何指示吗?
答案1
您可以在rm
命令上使用标准通配符:
rm -- *\ *
这将删除名称包含空格的任何文件;空格被转义,因此 shell 不会将其解释为分隔符。添加--
将避免以破折号开头的文件名出现问题(它们不会被解释为参数rm
)。
如果您想在删除每个文件之前对其进行确认,请添加以下-i
选项:
rm -i -- *\ *
答案2
我会避免解析ls
输出
为什么不 :
find . -type f -name '* *' -delete
没问题rm
:-)。
尽管这是递归的,并且会删除当前目录和嵌套目录中带有空格的所有文件,如注释中所述。
答案3
看看这个假设名称“奇怪的文件”
解决方案一
rm strange\ file
解决方案二
rm "strange file"
解决方案三
ls -i "strange file"
然后你会看到索引节点
find . -inum "numberoofinode" -exec rm {} \;
如果文件名非常奇怪,例如
!-filename or --filename
使用
rm ./'!-filename'
答案4
您可以使用:
find . -name '* *' -delete