Fork me on GitHub

Linux笔记(6)

  在某些情况下,rm 命令无法删除文件名中带有特殊字符的文件,一般情况下可以rm ‘XXXX’ 或rm \XXXX

,但文件名第一个字符是 “-“ 的时候,rm 会把文件名看成命令行参数,此时需要用另一种方法来删除。

1
2
3
4
5
[free@hurd]$ rm -ikdsf
rm: invalid option -- 'k'
Try 'rm ./-ikdsf' to remove the file ‘-ikdsf’.
Try 'rm --help' for more information.
###系统会给出提示直接在文件名前加./即可

  在用 tar 进行打包的时候,经常会因为打包的文件太多而报错

1
-bash: /bin/tar: Argument list too long

  此时可配合find命令解决此问题

1
2
3
4
5
find . -type -f -print > /tmp/testfile
###找出你需要的文件,并将其明称输入到/tmp/testfile
tar zcvf test.gz.tar --files-from /tmp/testfile
###从testfile取出文件名,并打包
tar -cv -T /tmp/testfile -f test.gz.tar

  当 rm 参数过多时,也可以借助 find 和 xargs 进行处理

1
2
3
4
find . -name "*" -print | xargs rm -rf
###用find找到你想要删除的文件,通过管道传输给xargs,然后xarg将其分割并作为参数送给rm处理
###或者也可以使用find 和 exec
find . -name "*" -exec rm {} \;

  有些时候我们希望一些文件不被删除,即使 root 也不行,此时需要用到 chattr

1
2
3
4
5
6
7
8
[free@hurd]$ sudo chattr +ai test.sh
[free@hurd]$ lsattr test.sh
----ia-------e-- test.sh
[free@hurd]$ sudo rm test.sh
rm: cannot remove ‘test.sh’: Operation not permitted
###无法删除
[free@hurd]$ sudo chattr -ai test.sh
###成功删除
------ 本文结束 ------