linux ls find rename grep 等命令笔记


#ls -l, ll

#按照修改时间顺序显示
ll -lt

#对结果统计个数
ll | wc -l


# get the first of last name in a folder
ls  | head -n 1
ls  | tail -n 1

#find

# 在当前目录找所有后缀是 .match 的文件
find . -name "*.match" 

# 在 ~/Downloads 目录下, 删除 .match 后缀的文件
find ~/Downloads -name "*.match" -delete

# 在当前目录下, 对所有 .match 后缀的文件 操作 ll  
find . -name "*.match" -exec ll {} \;

# 删除match结尾的任何文件或文件夹
find . -name "*match" -exec rm -rv {} + 
find . -name "*match" -exec rm -rv {} \;

# 在当前目录下, 找到所有以e1开头的文件, 且修改时间在120分钟内
find . -name "e1*" -mmin -120

# 在当前目录下, 找到所有以e1开头的文件, 且修改时间在2017-06-01之前的
find . -name "e1*" -not -newermt 2017-06-01

# 删除不为空的文件夹
find . -name "e1*" -exec rm -rv {} +
find . -name "e1*" -exec rm -rv {} \;

# calculate all the sub-folders' filenumber
for f in *; do [ -d ./"$f" ] && find ./$f -maxdepth 1 -mindepth 1 | wc -l ;done 

# copy the sub-folder without content to another place
cd /path/to/source && find . -type d -exec mkdir -p /path/to/dest/{} \;


for d in $(find . -maxdepth 1 -type d |sort)
do
ls $d | head -1
#echo $d
done

-mmin n是在 n 分钟内发生修改的
-mtime n是在 n 小时内发生修改的

具体 man find


#rename

# 在当前目录下, 把所有 .match 为后缀的文件名中, 把其中的 sub1 替换为 sub2
rename 's/sub1/sub2/' *.match

#去掉名字前面的(\d+)_
rename 's/(\d+)_//' *

#所有文件(比如都是数字)加上 .png 后缀
rename 's/(\d+)/$1.png/' *

Reference


#组合

# 在当前目录下, 找到所有e1开头的文件, 且修改时间在120min内, 按照修改时间顺序排列
ll $(find . -name "e1*" -mmin -120) -lt 

# 在当前目录, 找到所有 .match 后缀的文件, 对其进行文件名替换操作, 把其中的 r_6 替换为 _r
find . -name "*.match" -exec rename 's/r_6/_r/' {} \;
# 把当前目录下所有名称为test的文件or文件夹删除
find . -name 'test' -exec rm -rf '{}' \;

{}是指find的结果 并传给前面的操作
\;应该是指对找到的文件 做1次前面的操作

Reference1

# 显示2017.11.6 12:30要早的文件
find . -type f -newermt "nov 6, 2017 12:30" | xargs -n1 ls -l

-newerXY reference
a The access time of the file reference
B The birth time of the file reference
c The inode status change time of reference
m The modification time of the file reference
t reference is interpreted directly as a time

Reference2

#按时间sort
find . -type f -newermt "nov 6, 2017 12:30" -printf "%Tc %p\n" | sort -n

Reference3

注意:
rename只会找当前目录下的文件, 不会找子文件夹里的文件;
find 可以找所有子文件夹里的文件(-maxdepth-mindepth可以设置文件夹的搜索深度) .
所以要对包括子文件夹里的所有文件重命名的话, 需要用find找到文件, 把文件名传给rename.


#grep
Stackoverflow 上已经写得很好了(有4k+赞),这里是转载

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r or -Ris recursive,
  • n is line number, and
  • w stands for match the whole word.
  • l (lower-case L) can be added to just give the file name of matching files.

Along with these, --exclude, --include,--exclude-dir or --include-dir flags could be used for efficient searching:

  • This will only search through those files which have .c or .h extensions:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
  • This will exclude searching all the files ending with .o extension:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
  • Just like exclude files, it’s possible to exclude/include directories through --exclude-dir and --include-dir parameter. For example, this will exclude the dirs dir1/, dir2/ and all of them matching *.dst/:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"

This works very well for me, to achieve almost the same purpose like yours.
For more options check man grep


#SCP

# folder 加 -r
scp -r folder name@ip:"/Users/name/Downloads/"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值