文件管理
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 {} ;
shell 文本处理
sed
sed -n '100p' # show 100 line
sed -i 's/$/\r/' req_body # 将文件的换行符由 lf 修改为 crlf
sed -n '/^[^#]/p' file.conf # 显示非注释行, 非 # 开头
sed -n '/^[^#[:space:]]\{1,\}/p' file.txt # 显示非注释行, 非 # + 空格 开头
sed -e '/^[ ]*#|^$/d' # 删除以空格开头或#开头或者空行的行;
sed -i '1d' fiel1 # 删除第1行, 注意,大文件特别慢,会另外生成一个文件
sed -i '1,100d' fiel1 # 删除第1-100行
# 在文件头部插入一行
sed -i '1iexport LD_LIBRARY_PATH=$HOME/deploy/lib:$LD_LIBRARY_PATH' ~/.bashrc
# 过滤颜色字符串
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
sed 's,\x1B\[[0-9;]*[a-zA-Z],,g'
# 去除文件内的颜色控制字符
sed -i -E 's/\x1B\[[0-9]+m//g' node100.log
# 替换 以me1 开头, 后面跟38个字母
sed -i -e 's/me1[[:alnum:]]\{38\}/me1_addr/g' 500w.loggrep
grep "18080\|28080" # 多条件-或
grep -E "word1|word2|word3" file.txt # 多条件-或
egrep -v "xx|xx1|xx2" # 排除多个关键字
grep -C 10 xxx file # 查看关键字的前后10行
# -A 后面N行
# -B 前面N行
# -C 前后N行
# 查找当前目录下的部分文件中的包含关键字的文件
find ./ -type f -name "*.c" -o -name"*.h" | xargs grep "strings"jq
# jq 转义
user2='{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"A68XidNaWKkGL2YjO9OYXsVnnarMhXOsKko/KQp4Qo8C"}'
# 转换为友好的转义格式
echo $user2 | jq @json
# "{\"@type\":\"/ethermint.crypto.v1.ethsecp256k1.PubKey\",\"key\":\"A68XidNaWKkGL2YjO9OYXsVnnarMhXOsKko/KQp4Qo8C\"}"vi
set paste # 不自动缩进最后更新于