shell 命令使用整理

某文件夹下有很多文件, 将文件夹中的文件拆分到多个目录中

cd file_path
ls | head -20000 | xargs -i {} mv {} /new_path

说明: xargs -i 是将输出按照行为单位输出给后面的命令, 例如:

find ./logs -name "*log" | xargs -i echo {}

说明: xargs -p 逐条确认执行,每次输出,都会让你手动确认下是否执行,y 执行, n 不执行,例如:

find ./logs -name "*log" | xargs -p -i echo {}

用 xargs file 输出文件类型

find . -type f -print | xargs file

文件批量修改后缀

rename 's/\.jpg\.jpeg/g'

找出不符合命名规则的文件

find -type f -print |grep "jpg" | grep -vE "[A-Za-z0-9_\/ ]+\([0-9]+\).jpg" |xargs -i cp {} /data/doit

说明: 在 shell 下使用 grep 空格 直接使用空格就好, s 貌似不好使 , d 貌似也不好使, 直接使用 [0-9], 是不是真这样呢?

批量压缩图片

进入目录后进行转换, 用 find 命令配合 xargs 会报错,但是在目录下操作就没问题

ls | xargs -i convert -resize 1200 -quality 95% {} ../new path/{}

批量整理文件名

很多文件, 文件名类似 name_1.jpg, name_2.jpg, 需要整理出不重复的 name. 文件名比较有规律, 所以用 substr 方法截取.
ls -l | xargs -i expr substr {} 1 9 | sort -u > 1.txt

redis 根据条件清理 key

通过 pattern 匹配

redis-cli -a password --scan --pattern '*history*' | xargs redis-cli -a password del {}

通过 shell 匹配

#! /bin/bash

if [ ${#1} -eq 56 ]
then
     redis-cli -a mingDA@1234 del $1
fi

redis-cli -a --scan --pattern 'history' | xargs -i /root/check.sh {}


#### 创建 swap 交换磁盘

dd if=/dev/zero of=swap.disk bs=1M count=3k && mkswap -f swap.disk && swapon swap.disk

添加新评论