#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/' *
#组合
# 在当前目录下, 找到所有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次前面的操作
# 显示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
#按时间sort
find . -type f -newermt "nov 6, 2017 12:30" -printf "%Tc %p\n" | sort -n
注意:
rename
只会找当前目录下的文件, 不会找子文件夹里的文件;
find
可以找所有子文件夹里的文件(-maxdepth
及 -mindepth
可以设置文件夹的搜索深度) .
所以要对包括子文件夹里的所有文件重命名的话, 需要用find找到文件, 把文件名传给rename.
#grep
Stackoverflow 上已经写得很好了(有4k+赞),这里是转载
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
or-R
is recursive,n
is line number, andw
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/"