文件管理

文件管理

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 filename

rsync


# 只比对差异
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 {} \;
最后更新于