文件管理
linux 文件管理
工具
ag 'body' # 文本搜索
dos2unix filename # 格式转换
expand -t 4 filename # 将 TAB 转换为 4 个空格
wc -l $(find . -type f -name '*java') # 文件行数统计查看
ls -l --time-style=long-iso # 长时间格式find
find . -type d -exec chmod 750 {} \; # 按权限查找文件
find . -type f -exec chmod 640 {} \;
find . -type f -exec dos2unix {} \;
find . -size +50M # 查找大于 50M 的文件
find . -mtime +5 # 查询修改时间大于 5 day
find . -name 't*' -exec basename {} \; # 取文件名
find . -name *name1* -or -name *name2* # 多个关键字
find . -name '*.log' -type f -exec rm {} \;
# 查找最大的 10 个文件
find . -type f -exec du {} \; | sort -nr | head | awk '{print $2}'
# 查找当前目录下的文件夹内的 *.gz 文件, 只查找一级
find . -maxdepth 2 -type f -name "*.gz"
find . -maxdepth 2 -type f -name "*.tar.gz" -exec rm {} \;
# 删除 mac 的隐藏属性文件
find . -type f -name '._*' -exec rm {} \;
# 查询所有人可写的文件和目录
find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;
find / -type d \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;
# 查询没有属主的文件
Find / -nouser -o -nogroup
# 删除指定用户相关的文件和目录
find / -type f -user postgres -exec rm -f {} \;
find / -type d -user postgres -exec rm -rf {} \;综合搜索
locate # 搜索文件, 带数据库的
# 取当前目录下最大的 10 个文件
du -m * | sort -nr | head
# 列出当前目录下的各目录大小
du --max-depth=1 -h
du -sh ./*
for i in $(ls);do du -sh $i; done分割恢复文件
# 分割文件
split --bytes=50M --suffix-length=3 file_name.tar.gz file_
split -b 500M -a 5 6134624-node902.tar part_
# 恢复文件
cat file_* > file_name.tar.gz
# 分卷打包
tar czf - /path/to/dir | split -b 100M -d -a 3 - archive.tar.gz.
cat archive.tar.gz.* | tar xz -C /dest/path归档文件
tar xf xxx.tar.gz -C /dir/urlA # 解压到指定位置
tar -rvf 1.tar file # 给 tar 追加文件
# 解压当前目录下的所有文件
for i in $(ls);do tar xf $i;done
# 并行 压缩解压
pigz -p 20 -3 -c node192.qcow2 > node192.qcow2.gz
unpigz -p 8 node192.qcow2.gz远程文件
# 简单比对远程文件和本地文件的差异
diff docker/apt-cache/acng.conf <(ssh pve-1 'cat docker/apt-cache/acng.conf')
# 比对整个目录(递归, 统一格式)
diff -ruN local_dir <(ssh user@host 'tar -C /remote/path -cf - remote_dir | tar -xf - -C /dev/shm && echo /dev/shm/remote_dir')
# 比对+编辑
vimdiff docker/apt-cache/acng.conf scp://pve-1//home/wait/docker/apt-cache/acng.conf文件占用
# 查看占用某文件的进程
fuser - v filename
lsof filenamersync
# 只比对差异
rsync -n /dir1/ /data/share/hddDisk3/sync/
rsync -avuP --dry-run 09_docker/ pve-1:/home/wait/docker/
# 快速同步-按大小差异
rsync -anvh --size-only --stats /dir1/ /dir2/
# 单向同步
rsync -avuP --delete /dir1/ /dir2/
rsync -avuP --delete /dir1/ /dir2/
# ssh 同步
rsync -avuP --delete user1@192.168.0.206:/data/ssd2/archive/ /home/wait/archive/
# ssh 带端口
rsync -P -e 'ssh -p 31001' user1@1.179.1.1:file1.tar /home/user1/file2.tar
# 限速
# 9.76MB/s
rsync -avuP --bwlimit=10240 sver1:/data/nodes/11448389-xxx-hub-rocksdb /home/user1/backup/
# 5.01MB/s
rsync -avuP --bwlimit=5120 sver1:/data/nodes/11448389-gea-hub-rocksdb /home/user1/backup/
# 大文件传输 - 先拆后传
tar cf 6134624-node902.tar ./node902
split -b 500M -a 5 6134624-node902.tar part_
rsync -avuP -e 'ssh -p 31001' user1@1.1.1.1:/data/pro/bk ./bk
cat part_* > ../6134624-node902.tar
md5sum 6134624-node902.tar事件
# 将当前目录下全部 jsp 文件, 添加 backup 的后缀
for i in $(ls);
do
[ ${i##*.} = "jsp" ] && mv $i $i.backup
done删除特殊文件名的文件
删除特殊名字的文件, 避免 shell 解释不出来名字的情况, 如 '?]' 这个名字, 找到 inode 号然后删除
ls -li
find /root -maxdepth 1 -inum 953075 -delete
或者
find /root -maxdepth 1 -inum 131237 -exec rm -i {} \;最后更新于