【linux】让rm删除文件到“回收站”|cat 写多行文字到文件

目录

即可即用

说明

cat  写入脚本注意点(内容带有变量的)

全局不转义-单引号'EOF'

全局转义-双引号"EOF"

局部不转义-转义字符\

EOF知识(Here Document)


即可即用

将~/.local/share/Trash/files 作为回收站地址

vim  /usr/local/bin/rm.sh

#!/bin/bash

RECYCLE=~/.local/share/Trash/files

test ! -d ${RECYCLE} && mkdir -p ${RECYCLE} #if not trash folder,create one  

_datedir=`date +"%Y%m%d"`  

_dstdir=${RECYCLE}/${_datedir}  

test ! -d ${_dstdir} && mkdir -p ${_dstdir} #if not trash folder,create one  

for _parms in $*  

do  

if [ -d ${_parms} ] || [ -f ${_parms} ];then  

test -d ${_parms} && echo "${_parms} is directory" && mv ${_parms} ${_dstdir}/  

test -f ${_parms} && echo "${_parms} is file" && mv ${_parms} ${_dstdir}/  

else   echo "${_parms} is not directory or file"  

fi  

done

再在~/.bashrc文件中增加如下别名配置:

alias rm='/usr/local/bin/rm.sh'
alias surm='/bin/rm -i'

最后source ~/.bashrc重新载入.bashrc中的配置,实现rm 删除文件到回收站,surm彻底删除文件。

复制下面的脚本完成上面的动作:

cat > /usr/local/bin/rm.sh << 'EOF'
#!/bin/bash 

RECYCLE=~/.local/share/Trash/files
test ! -d ${RECYCLE} && mkdir -p ${RECYCLE} #if not trash folder,create one  
_datedir=`date +"%Y%m%d"`  
_dstdir=${RECYCLE}/${_datedir}  
test ! -d ${_dstdir} && mkdir -p ${_dstdir} #if not trash folder,create one  

for _parms in $*  
do  
if [ -d ${_parms} ] || [ -f ${_parms} ];then  
  test -d ${_parms} && echo "${_parms} is directory" && mv ${_parms} ${_dstdir}/  
  test -f ${_parms} && echo "${_parms} is file" && mv ${_parms} ${_dstdir}/  
  else   echo "${_parms} is not directory or file"  
fi  
done
EOF


echo "alias rm='/usr/local/bin/rm.sh'" >> ~/.bashrc
echo "alias surm='/bin/rm -i'" >> ~/.bashrc

source ~/.bashrc

说明

linux系统中误删文件恢复很麻烦,有的甚至无法恢复,所以简单实现rm脚本,实现删除文件到“回收站”。实现可以恢复到最后一次删除的文件,电脑重启后linux系统将自动删除“回收站”中的文件目录。

实现如下

中兴新支点的回收站地址是:~/.local/share/Trash/files,注意 RECYCLE=~/.local/share/Trash/files 不能写成RECYCLE=’~/.local/share/Trash/files‘

/usr/local/bin/rm.sh

#!/bin/bash RECYCLE=~/.local/share/Trash/files 
test ! -d  ${RECYCLE} && mkdir -p ${RECYCLE} #if not trash folder,create one 

_datedir=`date +"%Y%m%d"`  
_dstdir=${RECYCLE}/${_datedir}  
test ! -d ${_dstdir} && mkdir -p ${_dstdir} #if not trash folder,create one 

 for _parms in $*  do          
if [ -d ${_parms} ] || [ -f ${_parms} ];then                  

test -d ${_parms} && echo "${_parms} is directory" && mv ${_parms} ${_dstdir}/ 

                 test -f ${_parms} && echo "${_parms} is file" && mv ${_parms} ${_dstdir}/ 

         else                 
 echo "${_parms} is not directory or file"         

 fi 

 done

再在~/.bashrc文件中增加如下别名配置:

alias rm='/usr/local/bin/rm.sh'
alias surm='/bin/rm -i'

最后重新载入.bashrc中的配置,实现rm 删除文件到回收站,surm彻底删除文件。

echo "alias rm='/usr/local/bin/rm.sh'" >> ~/.bashrc
echo "alias surm='/bin/rm -i'" >> ~/.bashrc
source ~/.bashrc

命令说明:

test ! -d  $_recyc && mkdir -p $_recyc 

test express&&command

如果 express为真则执行command

shell编程中for file in $*; do是什么意思

$*是此行命令所在函数(脚本)的所有被传入参数的合集
与$@类似,不用引号的情况下没有区别
区别是当被""扩起来以后
"$*"被当做一个字符串
"$@"被当做n个字符串(n=参数个数)

for 是循环语句
意思就是,当file取每一个参数的值时,执行do后面的循环体
完整语句是
for file in $*;do
   #some_command
   echo $file
done
上面这就是循环打印每个参数. 

除了上面的方法,还可以安装:

trash-cli https://blog.csdn.net/resouer/article/details/20714277

注意:

 虽然rm用别名定义了,但是可以是用绝对路径的命令 删除文件 比如/bin/rm 1.txt 仍然是调用真实的rm删除,它是不会保存到.trash目录的。

7天自动删除

如果需要定义自动清理7天删除的文件

可以写一个脚本

#!/bin/bash

find /root/.trash/ -ctime 7 -type file -name "*" -exec /bin/rm {} \;

将脚本放入开机运行中

最近访问时间 access time (-atime)

最近更改时间 modify time (-mtime) 

最近状态改动时间 change time(-ctime)

举例说明:

  -mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件

  -mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名

  -mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名

  例如:将系统24小时内更改过内容的档案列出 。

  find / -mtime 0

找 “5天之内被更改过的档案名” 就是             find / -mtime -5

找“5天前的那一天被更改过的档案名” 就是   find / -mtime 5 

找“5天之前被更改过的档案名” 就是   find / -mtime +5

下面用图来说明一下:

Linux常用命令之 查找命令 find —— 细说 -atime,-mtime,-ctime - isqiao - 博客园

cat  写入脚本注意点(内容带有变量的)

cat的内容中带有变量的

全局不转义-单引号'EOF'

cat > getEthIrqBind.sh << "EOF"

cat > getEthIrqBind.sh << 'EOF'

cat > getEthIrqBind.sh << EOF

以上三个命令的区别:

cat > getEthIrqBind.sh << "EOF":
内容都会经过 shell 的解释和变量替换。($()或``括起来的语句会执行,$变量替换)
cat > getEthIrqBind.sh << 'EOF':
内容进行解释或变量不会被替换,所有内容都将按原样写入文件。
cat > getEthIrqBind.sh << EOF:

不可预测的太多,不推荐使用。

总的来说,如果想原样写入内容,那么使用单引号。如果想变量替换或命令替换,那么使用双引号。

全局转义-双引号"EOF"

见上面说明。

局部不转义-转义字符\

cat的多行内容有$等特殊字符时,须利用转义字符\

cat > file <<EOF
export ORACLE_SID=yqpt 
export PATH=\$PATH:\$ORACLE_HOME/bin  
EOF

说明:其实可以用其他字符来代替EOF,它也只是个标识符而已!
如果cat内容中带有 $变量的时候会将$和变量名变成空格,可以利用转义字符\添加之后可以搞定。


链接:https://www.jianshu.com/p/390759aca547
 

Cat命令结合重定向功能实现文本内容写入

  • 将stdin标准输入的内容重定向到test.txt文件(若此文件不存在,则创建),且当stdin中含有EOF时完成写入;
  • cat 追加内容用 >>,覆盖内容用 > ;
  • 其中EOF可以替换为任意字符串。

shell脚本cat写入文件不转义

1、使用\消除文件中元字符的含义

cat > .profile << EOF
echo "Hello World"
echo "Current Date and Time:"\`date\`
EOF

如果不用\消除`的含义,shell会在运行该脚本时执行date命令,并将当前时间写入文件,.profile文件中的内容是

echo "Hello World"
echo "Current Date and Time:"2021年 11月 10日 星期三 16:46:22 CST

cat <<EOF与cat <<-EOF的区别

如果重定向的操作符是<<-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。

通俗一点的解释:

在我们使用cat <<EOF时,我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。

(摘自:linux命令cat EOF详解_https://blog.csdn.net/robin90814/article/details/86705155)

EOF知识(Here Document)

(转自:https://www.jianshu.com/p/390759aca547

什么是Here Document

Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下:
cmd << delimiter
  Here Document Content
delimiter
它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;
注:这里delimiter可以是任意的字符串,一般写成EOF
@1、EOF 只是一个标识而已,可以替换成任意的合法字符
@2、作为结尾的EOF一定要顶格写,前面不能有任何字符
@3、作为结尾的EOF后面也不能有任何的字符(包括空格)
@4、作为起始的EOF前后的空格会被省略掉
例1
cat << EOF > output.sh
echo "hello"
echo "world"
EOF
将多行内容写入到output.sh脚本文件里

例2
$ wc -l << EOF
    欢迎来到
    菜鸟教程
    www.runoob.com
EOF
3

 Here Document的变形 与delimiter 与变量

1、Here Document的的变量替换
here.sh
#!/bin/bash
cat << EOF > output.sh
echo "This is output"
echo $1
EOF
执行:sh here.sh num1
cat output.sh 内容:
echo "This is output"
echo num1
这里变量$1被替换成num1

2、Here Document的的取消变量替换
here.sh
#!/bin/bash
cat << "EOF" > output.sh
echo "This is output"
echo $1
EOF
执行:sh here.sh num1
cat output.sh 内容:
echo "This is output"
echo $1
这里EOF被加上双引号或者单引号,即可取消变量的替换

3、Here Document前面加上 -  表示下述字段所有TAB键将全部忽略[不能是空格]
here.sh
#!/bin/bash
cat << -EOF
        echo "This is output"
EOF
sh here.sh
结果:
echo "This is output"  【去掉了前面的tab键】

更多知识:

Cat命令结合重定向功能实现文本内容写入_https://blog.csdn.net/networken/article/details/80564824

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值