photo_2021-12-01_22-42-18.jpg

I. 推荐序

Most Used Linux Commands Map.jpeg

距离Linux 常用命令 文章分类下最后一次更新已经过去了 2 年,特此拾起,进行系统性的学习。在这里将最近阅读的相关读物分享给大家,从入门到入门,书籍内容开源、免费、可在线阅读;适合所有即将折腾 Linux 服务器的用户,如搭建博客、部署面板等等。当然,对于 Mac/Windows用户而言,学习命令行也有很多好处,通过熟悉基础命令的功能特性,再自己写脚本来实现一些想要的效果,如按时间自动创建文件夹,并把当天下载的图片文件分别放入相应的文件夹下,清理7天内没有归档的图片,删除小于1MB的图片等等...。

一个例子:因为经常需要批量下载图片,偶尔会出现重复下载的情况,于是写了如下名叫 x.sh 的Shell脚本,将重复下载的图片删除;其中涉及到的命令有 md5/cp/mv/rm/cat/echo/find/while do/sed/grep/awk/sort/uniq...

脚本命名为 x.sh,在脚本的 while 循环中会重复调用;图片下载后放在 /Users/Julia/Downloads/Photos/,Photos 文件夹下按当天日期创建子文件夹x.sh 脚本完整内容如下:

文件去重

#!/bin/bash
path="/Users/Julia/Downloads/";
datex=$(date +%Y%m%d);
cd $path
mkdir ./Photos ./Photos/$datex > /dev/null 2>&1

#将当天下载的图片移至 ./Photos/$datex 下;
find . -type f -mtime -1 -print \( -iname "*.jpeg" -o -iname "*.jpg" -o -iname "*.png" \) -exec mv '{}' ./Photos/$datex ';';  

## 根据 MD5 删除重复文件
cd $path

# 汇聚全部JPG/JPEG/PNG 文件的MD5值及其所在路径
find ./*/$datex/ -type f \( -iname "*.jpeg" -o -iname "*.jpg" -o -iname "*.png" \) -exec md5 {} ';' >> md5.txt; 

cat md5.txt | awk '{print $NF}' | sort | uniq -d > md5_repeat.txt # 提取重复的MD5

while read line; do
   grep -E $line ./md5.txt | grep -Eo "./Photos.*\.(jpg|JPG|png|PNG|jpeg|JPEG)" >> md5_repeat_filter.txt #根据重复的MD5提取它们的路径
done < md5_repeat.txt

sed -n 'n;p' md5_repeat_filter.txt > md5_repeat_filter_rm.txt # 偶数行删除

while [ $(ls -l md5_repeat_filter_rm.txt | awk {'print $5'}) -gt 0 ]; do
    while read line; do
        rm "$line"
        rm $line
        echo DELETE $line ...
    done <md5_repeat_filter_rm.txt
    cd $path
    ./x.sh # 当前循环介绍再调用一次 直至  awk {'print $5'}) -gt 0 结果为 false;
done

cd $path
find ./ -name "md5*.txt" -exec rm -rf {} ';'; #删除产生的 txt 文件

当然,也可以优雅一点,像 JavaScript 函数那样;将需多次(循环)执行的脚本放入名为 x repeat 的自定义函数(Shell 函数)内;

#!/bin/bash
path="/Users/Julia/Downloads/";
datex=$(date +%Y%m%d);
cd $path
mkdir ./Photos ./Photos/$datex > /dev/null 2>&1

#将当天下载的图片移至 ./Photos/$datex 下;
find . -type f -mtime -1 -print \( -iname "*.jpeg" -o -iname "*.jpg" -o -iname "*.png" \) -exec mv '{}' ./Photos/$datex ';';  

xrepeat(){ ## 或 function xrepeat()
## 根据 MD5 删除重复文件
cd $path

# 汇聚全部JPG/JPEG/PNG 文件的MD5值及其所在路径
find ./*/$datex/ -type f \( -iname "*.jpeg" -o -iname "*.jpg" -o -iname "*.png" \) -exec md5 {} ';' >> md5.txt; 

cat md5.txt | awk '{print $NF}' | sort | uniq -d > md5_repeat.txt # 提取重复的MD5

while read line; do
   grep -E $line ./md5.txt | grep -Eo "./Photos.*\.(jpg|JPG|png|PNG|jpeg|JPEG)" >> md5_repeat_filter.txt #根据重复的MD5提取它们的路径
done < md5_repeat.txt

sed -n 'n;p' md5_repeat_filter.txt > md5_repeat_filter_rm.txt # 偶数行删除

while [ $(ls -l md5_repeat_filter_rm.txt | awk {'print $5'}) -gt 0 ]; do
    while read line; do
        rm "$line"
        rm $line
        echo DELETE $line ...
    done <md5_repeat_filter_rm.txt
    cd $path
    xrepeat # 当前循环介绍再调用一次 shell 函数 xrepeat 直至  awk {'print $5'}) -gt 0 结果为 false;
done
}

xrepeat

cd $path
find ./ -name "md5*.txt" -exec rm -rf {} ';'; #删除产生的 txt 文件

以上命令中,md5 在各个平台有不同的别名:Mac 终端:叫做 md5,Linux 终端:md5sum

TLCL-快乐命令行.jpg

II. TLCL - 《快乐的命令行》

在线阅读:https://billie66.github.io/TLCL/

TLCL - 《快乐的命令行》目录

引言 (Introduction)
第一章 引言
学习 shell
第二章 : 什么是 shell
第三章:文件系统中跳转
第四章:探究操作系统
第五章:操作文件和目录
第六章:使用命令
第七章:重定向
第八章:从 shell 眼中看世界
第九章:键盘高级操作技巧
第十章:权限
第十一章:进程
配置文件和 shell 环境
第十二章 : shell 环境
第十三章 : vi 简介
第十四章 : 自定制 shell 提示符
常见任务和基本工具
第十五章 : 软件包管理
第十六章 : 存储媒介
第十七章 : 网络系统
第十八章 : 查找文件
第十九章 : 归档和备份
第二十章 : 正则表达式
第二十一章 : 文本处理
第二十二章 : 格式化输出
第二十三章 : 打印
第二十四章 : 编译程序
编写 Shell 脚本
第二十五章 : 编写第一个 Shell 脚本
第二十六章 : 启动一个项目
第二十七章 : 自顶向下设计
第二十八章 : 流程控制:if 分支结构
第二十九章 : 读取键盘输入
第三十章 : 流程控制:while/until 循环
第三十一章 : 疑难排解
第三十二章 : 流程控制:case 分支
第三十三章 : 位置参数
第三十四章 : 流程控制:for 循环
第三十五章 : 字符串和数字
第三十六章 : 数组
第三十七章 : 奇珍异宝

III. TLCL - 《Bash 脚本教程》

本教程介绍 Linux 命令行 Bash 的基本用法和脚本编程。 Via Ruanyifeng;

在线阅读https://wangdoc.com/bash/

TLCL - 《Bash 脚本教程》目录

简介
基本语法
模式扩展
引号和转义
变量
字符串操作
算术运算
行操作
目录堆栈
脚本入门
read命令
条件判断
循环
函数
数组
set命令,shopt命令
脚本除错
mktemp命令,trap命令
启动环境
命令提示符

IV. TLCL - 《shell编程》

在线阅读https://shellscript.readthedocs.io/zh_CN/latest/index.html

语法基础
脚本结构
数据类型
变量
操作符
控制流程语句
函数
知识碎片
常用类库
常用环境变量
常用命令
常用函数
脚本示例
示例脚本
实用脚本

V. TLCL - 《命令行的艺术》

the art of command line

https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md

目录

前言
基础
日常使用
文件及数据处理
系统调试
单行脚本
冷门但有用
仅限 OS X 系统
仅限 Windows 系统
更多资源
免责声明

VI. 附注

Linux 常用命令学习:https://www.runoob.com/w3cnote/linux-common-command-2.html
面向初学者的命令行教程——如何像专业人士一样使用终端:https://www.freecodecamp.org/chinese/news/command-line-for-beginners/#a-bit-of-history-posix

最后修改:2023 年 09 月 28 日 09 : 46 PM