首页 > 系统相关 >Shell 工具和脚本

Shell 工具和脚本

时间:2023-12-11 21:26:00浏览次数:35  
标签:脚本 文件 xargs Shell -- echo marco 工具 find

20231211
课程链接:[自制双语字幕] 计算机教育缺失的一课(2020) - 第2讲 - Shell 工具和脚本_哔哩哔哩_bilibili

  1. 阅读 man ls ,然后使用ls 命令进行如下操作:

    • 所有文件(包括隐藏文件)
    • 文件打印以人类可以理解的格式输出 (例如,使用454M 而不是 454279954)
    • 文件以最近访问顺序排序
    • 以彩色文本显示输出结果

    典型输出如下:

     -rw-r--r--   1 user group 1.1M Jan 14 09:53 baz
     drwxr-xr-x   5 user group  160 Jan 14 09:53 .
     -rw-r--r--   1 user group  514 Jan 14 06:42 bar
     -rw-r--r--   1 user group 106M Jan 13 12:12 foo
     drwx------+ 47 user group 1.5K Jan 12 18:08 ..
    

解:
所有文件(包括隐藏文件)-a
文件打印以人类可以理解的格式输出 (例如,使用454M 而不是 454279954) -h
文件以最近访问顺序排序 -t
以彩色文本显示输出结果 --color=auto
想要输出文件的权限信息需要 -l

Username:~$ ls-laht --color=auto
  1. 编写两个bash函数 marco 和 polo 执行下面的操作。 每当你执行 marco 时,当前的工作目录应当以某种形式保存,当执行 polo 时,无论现在处在什么目录下,都应当 cd 回到当时执行 marco 的目录。 为了方便debug,你可以把代码写在单独的文件 marco.sh 中,并通过 source marco.sh命令,(重新)加载函数。
 #!/bin/bash
 marco(){
     echo "$(pwd)" > $HOME/marco_history.log
     echo "save pwd $(pwd)"
 }
 polo(){
     cd "$(cat "$HOME/marco_history.log")"
 }

image

  1. 假设您有一个命令,它很少出错。因此为了在出错时能够对其进行调试,需要花费大量的时间重现错误并捕获输出。 编写一段bash脚本,运行如下的脚本直到它出错,将它的标准输出和标准错误流记录到文件,并在最后输出所有内容。 加分项:报告脚本在失败前共运行了多少次。

     #!/usr/bin/env bash
    
     n=$(( RANDOM % 100 ))
    
     if [[ n -eq 42 ]]; then
        echo "Something went wrong"
        >&2 echo "The error was using magic numbers"
        exit 1
     fi
    
     echo "Everything went according to plan"
    
 #!/usr/bin/env bash
 echo > out.log
 for ((count=0;;count++))
 do
     ./buggy.sh &>> out.log
     if [[ $? -ne 0 ]]; then
         echo "failed after $count times"
         break

     fi
 done
  1. 本节课我们讲解的 find 命令中的 -exec 参数非常强大,它可以对我们查找的文件进行操作。但是,如果我们要对所有文件进行操作呢?例如创建一个zip压缩文件?我们已经知道,命令行可以从参数或标准输入接受输入。在用管道连接命令时,我们将标准输出和标准输入连接起来,但是有些命令,例如tar 则需要从参数接受输入。这里我们可以使用xargs 命令,它可以使用标准输入中的内容作为参数。 例如 ls | xargs rm 会删除当前目录中的所有文件。

    您的任务是编写一个命令,它可以递归地查找文件夹中所有的HTML文件,并将它们压缩成zip文件。注意,即使文件名中包含空格,您的命令也应该能够正确执行(提示:查看 xargs的参数-d,译注:MacOS 上的 xargs没有-d查看这个issue

    如果您使用的是 MacOS,请注意默认的 BSD find 与 GNU coreutils 中的是不一样的。你可以为find添加-print0选项,并为xargs添加-0选项。作为 Mac 用户,您需要注意 mac 系统自带的命令行工具和 GNU 中对应的工具是有区别的;如果你想使用 GNU 版本的工具,也可以使用 brew 来安装

find -name "*.html" | xargs --delimiter="\n\b" zip -r taylorswift.zip
find . -type f -name "*.html" | xargs -d '\n' tar -cvzf archive.tar.gz
  1. (进阶)编写一个命令或脚本递归的查找文件夹中最近使用的文件。更通用的做法,你可以按照最近的使用时间列出文件吗?
find . -type f -print0 | xargs -0 ls -lt | head -1

标签:脚本,文件,xargs,Shell,--,echo,marco,工具,find
From: https://www.cnblogs.com/TTS-TTS/p/17895571.html

相关文章

  • .NET5_静态文件读取+脚本参数
    一、静态文件读取:1、Nuget引入:Nuget引入Microsoft.Extensions.FileProvidersSystem.IO2、配置读取静态文件的中间件////读取静态文件的中间件////Nuget引入Microsoft.Extensions.FileProviders////System.IO//app.UseSta......
  • shell 获取返回值、上一次命令、上次命令参数
    前言全局说明shell获取返回值、上一次命令、上次命令参数一、获取上一次命令1.$?,上一次命令执行结果成功0;失败非0echo$?2.!!,执行上一次命令,是!-1的快捷方式3.!n,表示执行history里第n条命令,如!2表示执行ls6789104.!-n表示倒数第n条命......
  • 如何写简历-学习如何在 2023 年撰写简历所需的所有技巧、工具、模板和示例
    学习如何在2023年撰写简历所需的所有技巧、工具、模板和示例拥有一份经过精心打磨和精心撰写的简历就像在求职过程中拥有超能力一样。 当大多数人走上招聘阶梯时,你却披上了深红色的斗篷,以超音速的速度向上翱翔。本关于如何撰写简历的指南概述了创建此类令人惊叹的简历的最重......
  • 选择最适合您的数据集成工具
    个人对于个人而言,选择最适合的数据集成工具可能会有一些不同的考量因素。以下是一些个人选择数据集成工具时可能需要考虑的因素:技术水平和经验:如果个人具有较深的技术水平和经验,可能更倾向于选择功能丰富、灵活性强的数据集成工具,可以满足个性化的数据处理需求,并能够根据自......
  • 推荐一个超爽的前端工具HBuilder
    开发学习网站:http://www.runoob.com 菜鸟教程使用HBuilderUniApp跨平台开源框架开发的H5和有app项目感觉效果还不错以后跨平台是一个趋势哦可以学习一下语法是vue的语法开发还有一些小程序的语法结合起来的 有很多个开源项目,可以下载学习!一套代码可编译到8个平台 我学习后开......
  • 扫描并清除重复文件的Python脚本
    电脑里存的照片越来越多,其中有很多是重复的。如果依赖人边去一张一张对比,需要的工作量太大了。下面的Python脚本在一个目录树上递归地对所有文件作MD5校验,将重复的文件找出来。保留用户指定的文件,将多余的文件全部删除掉。#!/usr/bin/envpython3importsysimporthashlibim......
  • Linux基线安全检查脚本(很全)
    Linux安全基线加固点击关注......
  • Notepad++ 代码格式化插件工具
    因为notepad++的NppAStyle插件只支持格式化C、C++、C#、Java这四种编程语言的代码,所以推荐使用这个CoolFormat的插件,相比于NPPAStyle,CoolFormat支持C\C++\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。还可以作为VisualStudio2013、SublimeText、......
  • [Python急救站]文件管理工具
    对于一个程序员,有时候文件太多,忘记放哪里了,那有没有一个可以帮你定位到文件的文件管理工具呢,抱着这样的想法,我做了以下这个代码,可以快速定位找到文件所在位置。importosimporttkinterastkimporttimeimportsubprocess#函数用于搜索文件defsearch_files():file......
  • FreeRTOS中的事件组:实现任务同步与通信的强大工具
    引言:在实时嵌入式系统中,任务同步和通信是至关重要的,而FreeRTOS提供的事件组(EventGroups)机制为实现这一目标提供了一种高效且灵活的解决方案。本篇博客将深入研究FreeRTOS中的事件组,详细介绍其原理、使用方法,以及在实际应用中的一些最佳实践。事件组原理:事件组是FreeRTOS中的一种......