Ste*_*itt 30
您可以在rm命令上使用标准通配符:
rm -- *\ *
Run Code Online (Sandbox Code Playgroud)
这将删除名称中包含空格的任何文件;空格被转义,因此外壳不会将其解释为分隔符。添加--将避免文件名以破折号开头的问题(它们不会被 解释为参数rm)。
如果要在删除之前确认每个文件,请添加-i选项:
rm -i -- *\ *
Run Code Online (Sandbox Code Playgroud)
sol*_*iCe 18
我会避免解析ls输出
为什么不 :
find . -type f -name '* *' -delete
Run Code Online (Sandbox Code Playgroud)
没问题rm:-)。
尽管这是递归的,并且会删除当前目录和嵌套目录中的所有文件,如注释中所述。
看看这个假设名称为“奇怪的文件”
解决方案一
rm strange\ file
Run Code Online (Sandbox Code Playgroud)
解决方案二
rm "strange file"
Run Code Online (Sandbox Code Playgroud)
解决方案三
ls -i "strange file"
Run Code Online (Sandbox Code Playgroud)
然后你看到 inode
find . -inum "numberoofinode" -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
在非常奇怪的文件名的情况下,例如
!-filename or --filename
Run Code Online (Sandbox Code Playgroud)
用
rm ./'!-filename'
Run Code Online (Sandbox Code Playgroud)
小智 5
从man xargs
xargs 从标准输入中读取项目,以空格(可以用双引号、单引号或反斜杠保护)或换行符分隔,并执行命令(默认为 /bin/echo)一次或多次,后跟任何初始参数通过从标准输入读取的项目。标准输入上的空白行将被忽略。
我们(主要)可以通过将 xargs 分隔符更改为换行符来修复您的初始命令:
ls | egrep '. ' | xargs -d '\n' rm(不要这样做...继续阅读)
但是如果文件名包含换行符怎么办?
touch "filename with blanks
and newline"
由于Unix 文件名可以包含空格和换行符,因此这种默认行为通常会出现问题;xargs 会错误地处理包含空格和/或换行符的文件名。在这些情况下,最好使用 -0 选项,这样可以防止出现此类问题。
ls 它确实是一个供人直接使用的工具,我们需要使用find可以用空字符(-print0)分隔文件名的命令。我们还需要告诉 grep 使用空字符来分隔输入 ( -z) 和输出 ( -Z)。最后,我们告诉 xargs 也使用空字符 ( -0)
find . -type f -print0 | egrep '. ' -z -Z | xargs -0 rm