首页 > 代码库 > Linux删除破折号开头的文件与Windows下批量去掉文件的隐藏属性

Linux删除破折号开头的文件与Windows下批量去掉文件的隐藏属性

昨天去打印店打印材料,结果中毒了,所有的文件都隐藏了,生成了一堆快捷方式。回来之后,我顺手把它查到Linux的机器上,想删掉那些诡异的文件。下面是这个过程中,遇到的问题。

1、无法删除‘-’开头的文件

本来看到有好多windows下.lnk结尾的快捷方式文件,所以,直接简单粗暴的用rm -rf *.lnk 删除,结果报错。为了说明情况,我下面做了一个例子,目录中只有一个名为“-a.txt”的文件,执行下面的命令,报错信息如下:

rm *.txt
rm: invalid option -- 'a'
Try `rm ./-a.txt' to remove the file `-a.txt'.
Try `rm --help' for more information.

根据提示,可以知道,要想删除‘-’开头的文件,可以采用rm ./-a.txt的方式,或者可以查看rm --help,下面是rm --help中摘录的部分信息。

To remove a file whose name starts with a `-', for example `-foo',
use one of these commands:
  rm -- -foo
  rm ./-foo
从中可以看出,要想删除这样的文件,也可以采用rm -- -foo的形式。实际上,这种方式更加方便,我直接rm -- *.lnk就成功把所有的文件都给删掉了。

至于为什么会这样?如果你尝试创建一个‘-’开头的文件就知道了。

$ touch -a.txt
touch: invalid option -- '.'
Try `touch --help' for more information.
不难看出,系统将‘-’理解为是一个选项的打头标志,所以会提示不支持选项‘.’。你可能会纳闷,为什么不提示不支持选项a呢?因为a正好是touch的一个选项,意思是只修改文件的访问时间。^_^

2、批量修改文件的隐藏属性

接下来将U盘查到windows的电脑上,发现所有的文件都被设置成了隐藏属性,并且没法通过属性修改,具体如下图:

下面就是命令行发挥作用的时候了,windows命令行中有一个attrib命令,在cmd中运行“help attrib”,可以得到关于它的帮助,如下:

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]
       [drive:][path][filename] [/S [/D] [/L]]

  +   设置属性。
  -   清除属性。
  R   只读文件属性。
  A   存档文件属性。
  S   系统文件属性。
  H   隐藏文件属性。
  I   无内容索引文件属性。
  X   无清理文件属性。
  V   完整性属性。
  [drive:][path][filename]
      指定 attrib 要处理的文件。
  /S  处理当前文件夹
      及其所有子文件夹中的匹配文件。
  /D  也处理文件夹。
  /L  处理符号链接和
      符号链接目标的属性
不难想象,之所以通过系统界面没法直接修改隐藏属性,肯定是病毒将文件添加了系统文件和隐藏文件的属性,这里我们将它去掉就可以了,用命令“attrib -H -S /S /D *”即可。其实,这里的S的意思是Sytem,表示系统文件熟悉ing,而H代表Hide,表示隐藏文件属性,非常好记。从这里可以看出,命令操作相对于界面的简洁性。这或许也是windows更新了这么多带一值保留cmd的原因吧^_^



Linux删除破折号开头的文件与Windows下批量去掉文件的隐藏属性