bash1---基本0

news/2024/7/8 1:31:52

  最近在看《高级BASH脚本编程》,边学习脚本编程,边学习Linux的命令。

  另外还解决了笔记本电脑上关于Ubuntu无法找到wifi适配器的问题。具体看我另外一篇博客。

  另外推荐一个学习linux命令的网站。

  今天主要想讲一下如何备份最后一天所有修改的文件

#!/bin/bash

# 在一个"tarball"中(经过tar和gzip处理过的文件)
#+ 备份最后24小时当前目录下d所有修改的文件.

BACKUPFILE=backup-$(date +%m-%d-%Y)
# 在备份文件中嵌入时间.
# Thanks, Joshua Tschida, for the idea.
archive=${1:-$BACKUPFILE}      #这个地方讲的是变量1=${1:-$变量2},如果命令行没有指定参数(式子里面的$1),变量1=变量2;如果有参数变量1=$1
# 如果在命令行中没有指定备份文件的文件名,
#+ 那么将默认使用"backup-MM-DD-YYYY.tar.gz".
tar cvf - `find . -mtime -1 -type f -print` > $archive.tar
gzip $archive.tar
echo "Directory $PWD   backed up in archive file \"$archive.tar.gz\"."

# Stephane Chazelas指出上边代码,
#+ 如果在发现太多的文件的时候, 或者是如果文件
#+ 名包括空格的时候, 将执行失败.

# Stephane Chazelas建议使用下边的两种代码之一:
# -----------------------------------------------------------------
# find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"
# 使用gnu版本的"find".
# find . -mtime -1 -type f -exec tar rvf "$archive.tar" '{}' \;
# 对于其他风格的UNIX便于移植, 但是比较慢.
# -----------------------------------------------------------------

exit 0

  上面是书本中给出的例子

这里需要讲解的有两个命令,一个是tar,另外一个是find

tar——想要看tar 的相关信息可以输入命令info tar,如果英语不好(像我这样的学渣),可以看上面推荐网站的第十九章归档与备份

下面,我还是做一点简短的介绍:

tar - an archiving utility(一个归档工具):tape archiving file

 Archiving is the process of gathering up many files and bundling them together into a single large file. Archiving is often done as a part of system backups. It is also used when old data is moved from a system to some type of long-term storage.

tar -cvf 打包名字.tar 打包目录(tar --create --file=打包名字 For a more detailed listing, we can add the v (verbose) option:v=打包目录的内容)

tar -rvf 打包名字.tar (r是追加,使用-exec 行为,来 唤醒带有追加模式(r)的 tar 命令,把匹配的文件添加到归档文件 playground.tar 里面。)

 

eg:

find . -mtime -1 -type f | tar rvf "$archive.tar" -T -

   this convention of using “-” to represent standard input/output is used by a number of other programs, too.“-T -”表示"--files-from=-"(这个-就是标准输出s)

其实这个例子主要讲的就是“-”用于重定向stdin或stdout。即“-”可以被用来将stdout通过管道传递到其他命令中,可以放在结尾,也可以放在 tar中间

 find . -mtime -1 -type f -exec tar rvf "$archive.tar" '{}' '+'  #这个方法是同样是找出当前目录下1天内的普通文件进行打包,吧他们追加如$archive.tar中。

注:

  1. -c:建立一个压缩文件的参数指令(create 的意思);    
  2. -x:解开一个压缩文件的参数指令!    
  3. -t:查看 tarfile 里面的文件!    
  4. -r:向压缩归档文件末尾追加文件    
  5. -u:更新原压缩包中的文件     

 

 

另外一个是find命令.这是一个查找文件的命令,详细更多命令可以查看这个网站。
包括locate( Find files by name),find(Search for files in a directory hierarchy)
We will also look at a command that is often used with file search commands to process the resulting list of files:
xargs – Build and execute command lines from standard input
stat – Display file or file system status
wc-print newline ,word,and byte counts for each file
因为find 找到的文件是一行一行的表示,配合wc -l可以统计文件的个数
find 路径 -type [bcdfl]



File TypeDescription
bBlock special device file
cCharacter special device file
dDirectory
fRegular file
lSymbolic link
[me@linuxbox ~]$ find ~ -type f -name "*.JPG" -size +1M | wc -l
寻找文件大小大于1M的jpg图片,并输出个数。用双引号引起来通配符,为了防止shell展开路径名
另外:  find dir -type [bcdfl] -name "keyword"
     find dir -type [bcdfl] -name keyword -exec ls '{}' ';'
     find dir -type [bcdfl] -name keyword -print | xargs ls -l
  后面两个是等价的,其中'{}'代表查找出来的文件,';'代表结束符, 用''做转义;结束


另外就是 上文中用到的find的测试条件:
测试条件·                    描述
-cmin n匹配内容或属性最后修改时间正好在 n 分钟之前的文件或目录。 指定少于 n 分钟之前,使用 -n,指定多于 n 分钟之前,使用 +n。
-cnewer file匹配内容或属性最后修改时间晚于 file 的文件或目录。
-ctime n匹配内容和属性最后修改时间在 n*24小时之前的文件和目录。
-empty匹配空文件和目录。
-group name匹配属于一个组的文件或目录。组可以用组名或组 ID 来表示。
-iname pattern就像-name 测试条件,但是不区分大小写。
-inum n匹配 inode 号是 n的文件。这对于找到某个特殊 inode 的所有硬链接很有帮助。
-mmin n匹配内容被修改于 n 分钟之前的文件或目录。
-mtime n匹配的文件或目录的内容被修改于 n*24小时之前。
-name pattern用指定的通配符模式匹配的文件和目录。
-newer file匹配内容晚于指定的文件的文件和目录。这在编写执行备份的 shell 脚本的时候很有帮。 每次你制作一个备份,更新文件(比如说日志),然后使用 find 命令来判断哪些文件自从上一次更新之后被更改了。
-nouser匹配不属于一个有效用户的文件和目录。这可以用来查找 属于被删除的帐户的文件或监测攻击行为。
-nogroup匹配不属于一个有效的组的文件和目录。
-perm mode匹配权限已经设置为指定的 mode的文件或目录。mode 可以用 八进制或符号表示法。
-samefile name类似于-inum 测试条件。匹配和文件 name 享有同样 inode 号的文件。
-size n匹配大小为 n 的文件
-type c匹配文件类型是 c 的文件。
-user name匹配属于某个用户的文件或目录。这个用户可以通过用户名或用户 ID 来表示。

转载于:https://www.cnblogs.com/SsoZhNO-1/p/9222062.html


http://www.niftyadmin.cn/n/3141267.html

相关文章

效能改进之项目例会导入实践

众所周知,在项目管理的过程中,我们需要非常注重沟通,而每日例会作为沟通管理中的一项最佳实践,非常适配互联网项目短频快的特点。成功地在项目中建立例会制度,能带来以下好处: 1)让研发人员相互…

bash2----基本1

这个随笔主要讲一些关于bash的小track 1、如何注释多行bash: :<< 注释内容 &#xff1a;<<WORD 注释内容 WORD :<<BLOCK 注释内容 BLOCK 1.1这个是补充的一个知识点&#xff1a; 命令替换用的点是&#xff0c;在左上角 ESC下面那个&#xff0c;而不是单引号…

【转】利用telnet来进行调试Skynet

https://blog.csdn.net/WhereIsHeroFrom/article/details/80674408转载于:https://www.cnblogs.com/colourstar/p/10432057.html

js,jquery,数组操作小结

----------------------------------------------------------定义数组---------------------------------------------------------- $(function(){var aArray {};//定义一个数组aArray[name] "张三";aArray[sex] "男";aArray[mail] "123456qq.…

bash3---基本2

1、和let一样&#xff0c;[[ ]]也是一个bash命令&#xff0c;但是sh没有的。 下次对于sh: XXX&#xff1a;not found 可以通过把sh换成bash试试 2、关于NULL的if。od探究 对于NULL040时候&#xff0c;NULL is false for if 对于a040&#xff0c;即变量是NULL时候 if [ -n &qu…

蚂蚁微贷互动营销技术体系实践

摘要&#xff1a;以“数字金融新原力(The New Force of Digital Finance)”为主题&#xff0c;蚂蚁金服ATEC城市峰会于2019年1月4日上海如期举办。财富管理专场上&#xff0c;蚂蚁金服微贷事业群高级前端技术专家王卓做了主题为《蚂蚁微贷互动营销技术体系实践》的精彩分享。 演…

bash4----进阶1 内部变量

0、操作符之求最小公约数 #!/bin/bashARGS2 E_BADARGS65#args check #--------------------------------------- if [ "$ARGS" -ne $# ]thenecho "Usage: basename $0 num1 num2 " exit E_BADARGS fi #---------------------------------------gcd() {d…

Jdbc

jdbc 全称&#xff1a;Java Data Base Connection 以后我们不会直接使用JDBC&#xff0c;因为过于麻烦&#xff0c;后期工程中直接使用包装的数据库操作插件&#xff1a; …