Linux系统文件相关的命令


一、拷贝文件(包括隐藏文件)

1、cp命令 常用参数说明:

  • -r或-R 递归

  • -f 覆盖

  • -u 仅更新

  • -p  保留文件属性 (default:mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all

  • -d或-P  保留符号链接 

  • -a (--archive,归档的意思)相当于 -dpR 或者 -dR --preserve=all(-p和--preserve=all意思差不多)

2、拷贝目录下的所有文件(包括隐藏文件):

cp   -a   /src/.    /dist/

参数说明:-r为递归拷贝,-f为强制覆盖已存在的文件。

3、连带外层目录一起拷贝(包括隐藏文件):

cp -a /demo/src /dist/


二、混合隐藏文件的处理(删除、剪切、拷贝)

1、问题分析( 想看结论的直接看3 )

    Linux下面以 `.` 开头的文件为隐藏文件。另外,linux中还有两个特殊目录:`.` 和 `..`,有时候需要特殊处理。

    所谓 “混合隐藏文件”,是指操作的文件中,可能既有隐藏文件又有非隐藏文件。

    通常的场景为:

  1. 剪切(移动)一个目录下的所有内容或者部分内容(内容包括文件和目录,且文件中可能有隐藏文件)

  2. 拷贝、删除一个目录下的所有内容

  3. 拷贝、删除一个目录下的部分内容

    特别注意:

        若是针对 目录 和 非隐藏文件,则无需考虑隐藏文件问题。

        举例来说,我要拷贝(删除、移动)某个目录下的几个非隐藏文件,则直呼其名就行了,示例如下:

        cp -a src/aaa src/bbb src/*.doc   /dist

        另外,针对场景2,“拷贝、删除一个目录下的所有内容”,很容易实现:

拷贝目录下的所有:cp -a /src/.  /target/

删除目录下的所有:rm -rf /src && mkdir -p /src


2、总体策略

    方法一,使用通配符,分两批操作(隐藏文件一批,非隐藏文件一批)

    例如:

    rm   -rf    *    .[^.]*

    mv   *    .[^.]*    /dist/

    cp  -a  src/*   src/.[^.]*   /dist/

    说明:第一个*匹配除了隐藏文件的所有文件,第二个参数 .[^.]* 匹配隐藏文件。

    表达式 .[^.]* 的解释如下:

    以.开头,加不是.的一个任意字符,再加其他任意字符(*)。

    为什么不用 “.*” ? 因为 .* 会匹配 . 和 .. 这两个特殊目录。

    注意,.[^.]*不是正真意义上的正则表达式,普通ls、rm、mv、cp等命令只支持通配符,不支持完整的正则表达式。

    方法二(推荐):使用ls -A + 支持正则表达式的过滤命令(例如grep、sed或awk)。

    ls -A 等价于:ls -a egrep -v "^\.$|^\.\.$"  (即ls -a排除掉特殊目录`.`和`..`)

    上面的几个例子,可以用下面的解法

    ls -A | xargs -i rm -rf {}

    ls -A | xargs -i mv {} /dist/

    ls -A /opt/src | xargs -i cp -a /opt/src/{} /dist/

    注意 ls -A /opt/src打印出来的值是没有 /opt/src路径的,所以后面 cp等指令务必跟上路径


3、总结

    1)剪切(移动)一个目录下的所有内容

    ls -A | xargs -i mv {} /dist/

    ls -A /opt/src | xargs -i mv /opt/src/{} /dist/

    2)剪切、拷贝、删除一个目录下的部分内容

    ls -A /opt/src | egrep -v "^target" | xargs -i mv /opt/src/{} /dist/


4、延伸:

    剪切、拷贝、删除的对象为“从一个目录的任意子目录中筛选出部分内容”,怎么办?

    答案:先使用find、locate、whereis等命令查找到文件,得到全路径再做处理。例如:

rm -rf $(find /src/ -maxdepth 2 -mindepth 1 -name "*er")  || true

mv -f $(find /src/ -maxdepth 2 -mindepth 1 -name "*er")  /dist/  || true

或者:

find  /src/ -maxdepth 2 -mindepth 1 -name "*er" | xargs -r rm -rf

find  /src/ -maxdepth 2 -mindepth 1 -name "*er" | xargs -i -r mv -f {}  /dist/ (推荐)

注意,使用find、locate等命令查找文件后,再做删除、移动时,有一个缺点,那就是目录不能为空,否则mv或rm就会报错。

解决方案1:xargs 加上 -r (--no-run-if-empty) 参数(注意 -r option is a GNU extension,使用时最好测试一下)

解决方案2:可能报错的命令后面跟上“ || true” 或者“ || :”,例如:

mv -f /src/* /dist/ || true

mv -f /src/* /dist/ || :

说明:true 或者 ‘:’ 都代表什么都不做,但返回success、状态码0(可以打印echo $?查看上一个指令的状态码)

$ type -a true
true is a shell builtin
true is /usr/bin/true
true is /bin/true

$ type -a :
: is a shell builtin

扩展:排除某个(某些)文件

例如删除除app以外的其他文件(包括隐藏文件)

find  /src/ -maxdepth 1 -mindepth 1 ! -name "app" | xargs -r rm -rf

推荐下面的写法(只排除ee和.cc两个文件):

ls -A | egrep -v "^\.$|^\.\.$|^ee$|^.cc$" | xargs -r rm -rf



简单命令

查看磁盘使用率

df -h


动态查看文件内容

tail -f FILE_NAME


删除文件使用实例:

rm -f /var/log/httpd/access.log

将会强制删除/var/log/httpd/access.log这个文件


删除文件夹实例:

rm -rf /var/log/httpd/access

将会删除/var/log/httpd/access目录以及其下所有文件、文件夹


使用这个rm -rf的时候一定要格外小心,linux没有回收站的


新建文件 或 文件夹

touch test.txt

mkdir -pv /opt/lib/jvm

-p代表递归创建文件夹 -v代表显示创建文件夹的过程


拷贝文件/文件夹

单个文件:cp -u -v lib/report.jar /tmp/report.jar

多个文件至一个目录: cp -u -v lib/*.jar /tmp

目录到目录:cp -rf /lib/plugins/.  /tmp/plugins


统计文件行数

wc -lcw

例如: $ wc - lcw file1.log file2.log

 34106   655146    17831207 file1.log

 7           52             5445212  file2.log

每行对应行数、字数、字节数、文件名 如果命令行中没有文件名,则输出中不出现文件名。



相关问题

+ (点击以下标题显示正文内容)

Linux删除文件时报错Argument list too long

unable to execute /bin/rm: Argument list too long

+ (点击以下标题显示正文内容)

cp -r /lib/plugins/* /tmp/plugins 这个命令有两个问题

+ (点击以下标题显示正文内容)

删除文件时,排除文件、排除目录

+ (点击以下标题显示正文内容)

查看目录大小

+ (点击以下标题显示正文内容)

以尺寸大小排列文件和目录 

+ (点击以下标题显示正文内容)

查看文件夹下面的文件个数:

+ (点击以下标题显示正文内容)

查找并替换文件里的字符串内容

+ (点击以下标题显示正文内容)

查找文件

+ (点击以下标题显示正文内容)

查看文件的指定行

+ (点击以下标题显示正文内容)

查找某目录下包含关键字内容的文件


vim字符串查找

直接输入 斜杠/ 然后输入查找的字符串

下一个,n是向前找,N是向后找



从linux上传文件到linux服务器的命令如下:

scp local_file remote_user@host:remote_folder

例如:

scp 下载/kafka_2.11-0.9.0.1.tgz kafka@172.16.1.170:/home/kafka


+ (点击以下标题显示正文内容)

tar命令

© 2009-2020 Zollty.com 版权所有。渝ICP备20008982号