1. 前言本文记录Linux中常用的文件管理命令,主要包括:
cp:拷贝文件 mv:移动文件 rm:删除文件 tar:解压与压缩文件 zip:解压与压缩文件 unar:解压文件 split:拆分文件 2. cp命令2.1. 纯净cpcp 命令,可能会被 alias 改写附加一些参数。 因此使用 cp 前,最好先 unalias 一下。
1 alias | grep -w "cp" && unalias cp
或者,使用cp的绝对路径
2.2. cp常用参数2.3. 递归拷贝1 2 cp -rf public/* voidking cp -rf public/. voidking
2.4. 匹配排除.和..当前目录下,一定存在两个目录:.
和..
。 有一些操作我们需要排除这两个目录,怎样匹配排除它们呢?
1 2 3 4 5 6 ls -als -a | xargsls -a | wc -lls -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 dirAls | grep -v log | xargscp -r `ls | grep -v log | xargs` pathto/dirB
方法二:包含隐藏文件
1 2 3 cd dirAls -a | grep -vw '\.' | grep -v log | xargscp -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. 移动非隐藏文件4.2. 移动隐藏文件4.3. 移动隐藏文件和非隐藏文件1 mv test0/* test0/.[^.]* test1
5. rm命令5.1. rm排除目录需求:想要删除dirA目录下的所有目录和文件,除了.git目录
1 2 3 cd dirAls -a | grep -vw '\.' | grep -vw '\.git' | xargsrm -rf `ls -a | grep -vw '\.' | grep -vw '\.git' | xargs`
5.2. 删除特殊字符名称的文件1 2 3 4 5 6 ls -ifind . -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 filenametar -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 | tr -d '[:space:]' )linenum=$((${sum} *${percent} /100 )) split -l ${linenum} ${bigfile} -d -a 2 ${datadir} /${prefix}
注意:wc -l
之后最好加上 tr -d '[:space:]'
,因为某些版本的wc命令会在输出结果之前添加空格。
10. 其他10.1. 文件软链创建文件软链
1 ln -s source_file link_file
强制修改文件软链
1 ln -sfn new_source_file link_file
10.2. 显示文件的绝对路径10.3. 查看文件字节查看文件的前16个字节
1 hexdump -n 16 -C demo.txt