一个计算机技术爱好者与学习者

0%

好好学Linux:文件管理常用命令

1. 前言

本文记录Linux中常用的文件管理命令,主要包括:

  • cp:拷贝文件
  • mv:移动文件
  • rm:删除文件
  • tar:解压与压缩文件
  • zip:解压与压缩文件
  • unar:解压文件
  • split:拆分文件

2. cp命令

2.1. 纯净cp

cp 命令,可能会被 alias 改写附加一些参数。
因此使用 cp 前,最好先 unalias 一下。

1
alias | grep -w "cp" && unalias cp

或者,使用cp的绝对路径

1
/usr/bin/cp

2.2. cp常用参数

1
2
3
cp -f #强制覆盖
cp -R #递归拷贝所有文件。对特殊文件(管道文件、块设备文件、字符设备文件)会进行创建而不是拷贝。
cp -r #递归拷贝所有文件。所有source文件当做普通文件。

2.3. 递归拷贝

1
2
cp -rf public/* voidking #递归拷贝所有文件,不包括隐藏文件
cp -rf public/. voidking #递归拷贝所有文件,包括隐藏文件

2.4. 匹配排除.和..

当前目录下,一定存在两个目录:...
有一些操作我们需要排除这两个目录,怎样匹配排除它们呢?

1
2
3
4
5
6
ls -a
ls -a | xargs
ls -a | wc -l
ls -a | grep -vw '\.'
ls -a | grep -vw '[.]'
ls -a | grep -v '^.$' | grep -v '^..$'

2.5. cp排除目录

需求:源目录为dirA,目标目录dirB,复制dirA下所有目录&文件到dirB,排除目录log
方法一:不包含隐藏文件

1
2
3
cd dirA
ls | grep -v log | xargs
cp -r `ls | grep -v log | xargs` pathto/dirB

方法二:包含隐藏文件

1
2
3
cd dirA
ls -a | grep -vw '\.' | grep -v log | xargs
cp -r `ls -a | grep -vw '\.' | grep -v log | xargs` pathto/dirB

2.6. cp特定文件

需求:找到 test0 目录中第一层目录下的所有文件类型的文件,并拷贝到 test1 目录中

1
find test0/ -d 1 -type f -exec cp {} test1/ \;

3. rsync命令

参考文档:rsync命令的安装使用

4. mv命令

4.1. 移动非隐藏文件

1
mv test0/* test1

4.2. 移动隐藏文件

1
mv test0/.[^.]* test1

4.3. 移动隐藏文件和非隐藏文件

1
mv test0/* test0/.[^.]* test1

5. rm命令

5.1. rm排除目录

需求:想要删除dirA目录下的所有目录和文件,除了.git目录

1
2
3
cd dirA
ls -a | grep -vw '\.' | grep -vw '\.git' | xargs
rm -rf `ls -a | grep -vw '\.' | grep -vw '\.git' | xargs`

5.2. 删除特殊字符名称的文件

1
2
3
4
5
6
ls -i
find . -inum 83661618
# 删除文件
find . -inum 83661618 -delete
# 删除非空目录
find . -inum 83661619 -exec rm {} \;

5.3. 删除10天前的日志

需求:找出10天前的日志并删除。
脚本(推荐):

1
find /usr/local/tomcat/logs/ -type f -mtime +10 | xargs rm -rfv

或者:

1
find /usr/local/tomcat/logs/ -type f -mtime +10 -exec rm -rfv {} \;

6. tar命令

6.1. 压缩与解压tar.gz文件

1
2
tar -czvf filename.tar.gz filename
tar -xzvf filename.tar.gz

6.2. 压缩文件时去掉路径

压缩文件时,仅保留父目录

1
tar -czvf filename.tgz -C /path/to/dir/ subdir

压缩文件时,去掉所有上层目录

1
tar -czvf filename.tgz -C /path/to/dir/subdir .

6.3. 解压文件到指定路径

解压文件到指定路径

1
2
mkdir filename
tar -xzvf filename.tgz -C filename

不包含上层目录的压缩文件,解压文件到指定路径

1
tar -xzvf filename.tgz -C filename -m --no-overwrite-dir

参数说明:

1
2
3
4
5
-m, --touch
Don't extract file modified time.

--no-overwrite-dir
Preserve metadata of existing directories.

如果不指定 -m--no-overwrite-dir 参数,可能会报错:

1
2
3
tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

这是因为压缩文件中包含 ... ,解压时会尝试修改父目录的属性。详情参考文档 Permissions cannot be restored for a tar

6.4. tar排除目录

需求:打包目录dirA下所有目录&文件,排除目录dirA/log和dirA/data

1
tar -czvf dirA.tar.gz dirA --exclude dirA/log --exclude dirA/data

6.5. tar文件拆分与合并

使用sz传输大文件,有时候会被中断。这时我们可以把文件进行拆分,下载后再进行合并。

1
2
3
tar -czf - bigfile.tar.gz | split -b 50m -d - bigfile.tar.gz.
cat bigfile.tar.gz.* | tar -xzf -
md5sum bigfile.tar.gz

7. zip命令

7.1. 压缩与解压zip文件

1
2
zip filename.zip filename
unzip filename.zip

7.2. 解压zip文件到指定目录

1
unzip -d filename filename.zip

7.3. 加密压缩和解压zip文件

1
2
3
4
zip -er filename.zip filename
zip -er -P xxxxxx filename.zip filename

unzip -P xxxxxx filename.zip

7.4. 批量加密压缩和解压zip文件

1
2
3
for i in `ls`;do zip -er -P xxxxxx $i.zip $i;done

for i in *.zip;do unzip -P xxxxxx $i;done

8. unar命令

8.1. 解压中文名zip文件

1
2
3
4
yum install unar
unar -e GBK 中文名.zip
unar -e GBK -p xxxxxx 中文名.zip
for i in *.zip;do unar -e GBK -p xxxxxx $i;done

9. split命令

9.1. 按照固定行数拆分文件

需求:大文件拆分成小文件,每50行拆分成一个文件。
脚本:

1
2
3
4
5
6
7
8
#!/bin/bash

linenum="50"
bigfile="bigfile.txt"
datadir="files"
prefix="smallfile."
mkdir -p ${datadir}
split -l ${linenum} ${bigfile} -d -a 2 ${datadir}/${prefix}

9.2. 按照行数百分比拆分文件

需求:大文件拆分成小文件,按百分比拆分,例如每 34% 拆分成一个文件。
脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

percent="34"
bigfile="bigfile.txt"
datadir="files"
prefix="smallfile."

rm -rf ${datadir}/${prefix}*
mkdir -p ${datadir}
content=$(cat ${bigfile})
sum=$(echo "${content}" | wc -l)
linenum=$((${sum}*${percent}/100))
split -l ${linenum} ${bigfile} -d -a 2 ${datadir}/${prefix}

10. 其他

10.1. 文件软链

创建文件软链

1
ln -s source_file link_file

强制修改文件软链

1
ln -sfn new_source_file link_file

10.2. 显示文件的绝对路径

1
realpath filename
  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-linux-file/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~