ls相关(.\*和\*)

ls相关(.*和*)

1. ls .*

  • 显示当前文件夹内的以.开头的文件,包括隐藏文件和隐藏文件夹
  • 显示当前文件夹.内的所有的非隐藏文件和文件夹(任意名称)
  • 显示当前文件夹.内的以.开头的文件夹(隐藏文件夹)和它内部第一层内的非隐藏文件和文件夹;但不显示当前此.文件夹内的以.开头的第1层内的文件夹(第2层)中的任何文件(也就是如果当前文件夹.是第0层,则不显示它里面第二层的文件夹中的内容,只显示到第二层的文件夹的名称即停止),不显示第1层文件夹内的以.开头的文件(即隐藏文件和隐藏文件夹)
  • 查看当前文件夹父目录..内的非隐藏文件;同上不显示父目录内的其他文件夹内的文件,不显示父目录内的以.开头的文件(也就是隐藏文件和因残文件夹)

2. ls .* -a

显示当前文件夹内所有文件,包括隐藏文件;以及其父目录内的第一层所有文件包括隐藏,以及以.开头的子目录内第一次呢该文件,包括隐藏。

3. ls .* -R

显示当前文件夹内所有文件包括隐藏文件,其父目录内的所有文件和其子目录下的所有层文件(不包括隐藏文件和隐藏文件夹,而且当前目录的不隐藏文件会再次显示一遍)

4. ls .* -a -R

比上面多了隐藏.

5. ls *.

显示当前文件夹内以.结尾的所有文件和文件夹,但不显示隐藏文件

6. ls .

显示当前文件夹内的名称中间中间包含.的所有文件和文件夹,但是注意,不包含隐藏文件,因为*不能显示隐藏文件

7. ls *

显示当前文件夹内的所有非隐藏文件和文件夹,和当前文件夹内第1层所有非隐藏文件和文件夹

8. ls * -a

显示当前文件夹内的所有非隐藏文件和文件夹,并显示这些文件夹内的第1层所有文件包括隐藏文件

9. ls * -a -R

显示当前文件夹内的所有非隐藏文件和文件夹,并显示这些文件夹内的所有层所有文件包括隐藏文件

10. ls * -R

显示当前文件夹内的所有非隐藏文件和文件夹,包括其所有子目录下的所有层的非隐藏文件.

注意点1:

  1. 如果只使用ls命令,后面不加特定目标,则相当于ls ./ 会把当前文件夹内所有文件和目录显示一遍 ,但如果用ls 加通配符,如果不加上-d则碰到文件目录的时候会进去显示里面的文件。

总结常用的1区分点:

  • ls -d *:只显示当前文件夹内所有非隐藏文件和文件夹(-d 选项的作用是不进入当前目录内的子文件夹内进而进一步显示子文件夹中的内容,下同
  • ls -d */:只显示当前文件夹内的非隐藏目录,不显示任何文件包括非隐藏文件
  • ls -d .[^.]*:显示当前文件夹内所有隐藏文件和目录
  • ls -d .[^.]*/:只显示当前文件夹内的隐藏目录,不显示任何文件包括隐藏文件
  • ls -d .*:显示当前文件夹内所有隐藏文件和目录
  • ls -d .*/:只显示当前文件夹内的隐藏目录,不显示任何文件包括隐藏文件
  • ls -d .* * : 相当于ls -a
  • ls -d .*/ */ :只显示当前目录第一级子文件夹,包括隐藏的和非隐藏的,可以用这一点来不使用find命令找文件夹。

rm相关

1. rm -rf .* 或者 rm -rf ./.*

上面那两个相当于一个命令(参考ls .*),这个是有问题的命令,虽然也能删除当下文件夹内的隐藏文件和隐藏文件夹(和里面的所有内容),并且保留非隐藏文件和文件夹, 但是这个命令会尝试删除. 和.. 只不过跳过了。

17:28[root@centos7 /data/cptest/zhang]# rm -rf ./.* rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘./.’ rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘./..’ 17:31[root@centos7 /data/cptest/zhang]# ls -a ...

2. ~~rm -rf .[^.]* ~~

删除当前文件夹内的所有隐藏文件和隐藏文件夹(包括隐藏文件夹内的其中所有内容),但是不删除非隐藏文件和文件夹。和上面的命令同一个结果,但是不报错。

这里 注释掉它的原因是因为.[^.]*这个通配符,不能够代表所有的隐藏文件和隐藏文件夹,比如开头有多个.点的隐藏文件,它就不行,所以就用上面的1中的命令就行了,虽然会报不能删除. 和.. 目录。

3. rm -rf

4. rm -rf ./* 或者 rm -rf *

删除当前目录下的所有非隐藏文件和非隐藏文件夹(包括非隐藏文件夹内其中所有内容,即使里面有隐藏文件也删除)

5. rm -rf ./.

错误的命令,不能这样执行

注意点2(删除文件夹内容但是不删除文件夹):

  1. 可以先创建一个文件夹的软链接,然后用 rm -rf 软链接/ 的方式 删除源文件夹内的所有内容,但是保留原文件夹。注意软链接后面必须加上/,不然就把这个软链接本身给删掉了,参考一下下面的ls 软链接相关内容。
  2. 还可以rm -rf rmtest/{*,.*},一条命令删除文件夹内所有文件但保留文件夹
  3. 更简单的方法有,进入到文件夹内,然后用命令 rm -rf $(ls -A) 也可直接删除掉文件夹内的所有文件包括隐藏文件和文件夹。
  4. 最简单的命令就是进入文件夹之后用命令 rm -rf * .*,注意中间有空格。

软链接目录相关(和ll相关部分,与rm相关部分查看rm指令中解释)

  1. ll 软链接 或者 ll 软链接 -d(加不加-d都一样):显示这个软链接本身的信息
  2. ll 软链接/ :显示这个软连接连接到的目录内的文件信息
  3. ll 软链接/ -d :这个相当于 ll 软链接目录 -d ,显示目标目录文件夹本身的信息
  4. 附加: ll 目录 都是显示目录下的内容, 加不加/ 结果都一样。 只有加了-d 显示的结果才是本身文件夹的信息。 只不过加了-d 以后,结果也会显示加不加/,有细微差别:
22:04[root@centos7 /data]# ll cptest/ -d drwxr-xr-x. 3 root root 19 Mar 12 21:54 cptest/ 22:04[root@centos7 /data]# ll cptest -d drwxr-xr-x. 3 root root 19 Mar 12 21:54 cptest
21:55[root@centos7 /data]# ll lintst lrwxrwxrwx. 1 root root 6 Mar 11 20:03 lintst -> cptest 21:55[root@centos7 /data]# ll lintst/ total 4 drwx------. 15 zhang zhang 4096 Mar 9 23:39 zhang 21:55[root@centos7 /data]# ll lintst/ -d drwxr-xr-x. 3 root root 19 Mar 12 21:54 lintst/ 21:56[root@centos7 /data]# ll cptest total 4 drwx------. 15 zhang zhang 4096 Mar 9 23:39 zhang 21:56[root@centos7 /data]# ll cptest -d drwxr-xr-x. 3 root root 19 Mar 12 21:54 cptest

cp相关

  1. cp -a /root/. /data/

    • 如果/data/目录不存在
      • 则创建/data目录,并将/root目录里面的所有文件包括隐藏文件(夹)拷贝到/data里面
      • 此时这里/root/.加不加.都一样
    • 如果/data目录存在
      • 则将/root/里面的所有文件包括隐藏文件(夹)都拷贝到/data/目录里面
      • 注意此时必须加.不然的话就会在/data目录下创建一个/root目录,然后把/root里面的所有文件包括隐藏文件(夹)都拷贝到/data/root里面去了,和下面的1对比
  2. cp -a /root/ /data/

    • 如果/data/目录不存在
      • 则创建/data目录,并将/root目录里面的所有文件包括隐藏文件(夹)拷贝到/data里面
    • 如果/data目录存在
      • 如果data下并没有root这个名字的目录,则在data下创建新root目录,并将所有文件包括隐藏文件拷贝到/data/root目录中去
      • 重要注意点:如果data下有root这个名字的目录,则会把提醒是否覆盖/data/root内的相同文件
  3. cp -r /root/$(ls -A /root) /data/ 实现了和0中相同的功能(但是不能保留文件所有的属性)

  4. cp -a /root/ /data/rootbak:在data下创建新rootbak目录并考进去

  5. cp -a /root/$(ls -A | grep "^\.") /data/ 把root下的所有隐藏文件,隐藏文件夹(包括里面的所有隐藏文件和非隐藏文件),拷贝到data下

  6. cp -a /root/* /data :root下的非隐藏文件和非隐藏文件夹(包括里面的所有非隐藏文件和隐藏文件)考到data下

  7. cp -a /root/.* :(加-a的话也有-R ,这个就参考ls 那部分即可) 基本上没有这个用法,错误的用法,这样做会把root目录的父目录内的所有文件和目录也进行拷贝的

无聊测试

自己测试一下以下各行代码,看看正确和错误结果怎么显示和定向 1.t是当前文件夹下的普通文件

ls /eraf /home 1>1.t 2>1.t ls /eraf /home 1>>1.t 2>1.t ls /eraf /home 2>>1.t 1>1.t ls /eraf /home 2>1.t 1>1.t ls /eraf /home 2>1.t 2>&1 1>1.t ls /eraf /home 2>>1.t 2>&1 1>1.t ls /eraf /home 2>&1 2>1.t 1>1.t ls /eraf /home 2>&1 2>>1.t 1>1.t

总结常用的2区分点

  1. .*则比较麻烦和复杂,它既包含上级目录,又包含本机目录的所有文件;一般适用于rm用于删除当前文件夹内的隐藏文件和目录,而cp一般不能用这个;
  2. 隐藏文件和隐藏文件夹 .*(注意它包含. 和..,使用时要注意,rm可用,cp不可用)$(ls -A | grep "^\.")
  3. 非隐藏文件和非隐藏文件夹 *

上面的两个通配符的使用,配合-r或者-R 在各命令中的区别:

  1. 如果在ls的时候不加上-a,默认只显示对应的隐藏或者非隐藏文件(看通配符的选项)
  2. ~~如果在cp 或者rm 中 ~~
    即便配合上面的通配符选项(本意是仅仅想要隐藏的或者非隐藏的文件和文件夹),但当利用-r和-R进行递归后
    • 一级目录没有问题,是会包含次级目录(文件夹)内的所有文件,不论是隐藏还是非隐藏文件。但是注意,配合上面的选项在一级目录(文件夹)内,如果是文件的话仍然只显示对应的隐藏或者非隐藏文件
  3. mv命令移动文件夹并不需要-R选项

一些其它杂项

  1. pstree命令下可以看到如果多次su转换,则多开很多bash
  2. 因此su su在切换之后要退出,用exit或者logout
  3. 硬链接其实是普通文件:在7种文件类型中一个硬链接坐前面的文件类型中显示的并不是l(链接类型),而是-普通文件类型
最后修改日期: 2021年7月9日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。