shell删除当前目录除一些文件(目录)后的其他文件

本文深入探讨了Shell脚本中的高级技巧,包括如何使用copy备份并删除其他文件、利用shopt命令增强shell易用性、掌握find命令进行精确文件删除以及在循环中智能判断和删除特定文件。这些技巧对于提升Shell脚本的效率和灵活性至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、copy备份然后删除

save_file_and_del_other()
{
    print_info "save_file_or_dir in"
    mkdir ../copy_tmp
    for tmp in "$@"; do
        print_info "save $tmp"
        cp -p -${debug_opt} $tmp ../copy_tmp/
    done
    if [[ $? -ne 0 ]];then  print_error "save file_or_dir failed!";fi

    rm -${debug_opt} ./*
    if [[ $? -ne 0 ]];then  print_error "del current directory failed!";fi

    cp -p -${debug_opt} ../copy_tmp/* ./
    if [[ $? -ne 0 ]];then  print_error "restore file_or_dir failed!";fi

    rm -${debug_opt} ../copy_tmp
    if [[ $? -ne 0 ]];then  print_error "rm copy_tmp failed!";fi

}

2、使用shopt命令

shopt命令用于显示和设置shell中的行为选项,通过这些选项以增强shell易用性。
shopt命令若不带任何参数选项,则可以显示所有可以设置的shell操作选项。 

开启与关闭

开启shopt命令:shopt -s extglob 
关闭shopt命令:shopt -u extglob

开启之后,以下5个模式匹配操作符将被识别:

  • ?(pattern-list) - 所给模式匹配0次或1次;
  • *(pattern-list) - 所给模式匹配0次以上包括0次;
  • +(pattern-list) - 所给模式匹配1次以上包括1次;
  • @(pattern-list) - 所给模式仅仅匹配1次;
  • !(pattern-list) - 不匹配括号内的所给模式。
shopt -s extglob

rm -rfv !(config|Config)

shopt -u extglob

3、find命令

下面的命令将会删除当前目录下除了 .gz 之外的所有文件

$ find . -type f -not -name '*.gz' -delete

下面的命令行将会删除掉当前目录下除了 .gz、 .odt 和 .jpg 之外的所有文件:

$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete


find . -maxdepth 1 -type d -not \( -name 'hard' -or -name 'over' \) |xargs rm -rfv 2>&1 |tee -a log

4、删除当前目录下的某一个文件

for filename in $(find ./ -name "*")
	do
		if [ "${filename}" = "./" ]; then
			echo "Don't delete ${filename}"
            #echo -n ""    什么也不打印,do nothing,shell中if语句不能为空
		elif [ "${filename:0-10}" = "aaaaConfig" ]; then
			echo "Don't delete ${filename}"
		elif [ "${filename}" = "./lib/firmware_v5/idspdrv_cmd_msg.h" ]; then
			echo "Don't delete kernel/private/lib/firmware_v5/idspdrv_cmd_msg.h"
		elif [ "${filename}" = "./lib/firmware_v5/cmd_msg_v5.h" ]; then
			echo "Don't delete kernel/private/lib/firmware_v5/cmd_msg_v5.h"
		elif [ -d ${filename} ]; then
			echo "${filename} is a directory, don't delete"
		else
			rm -${debug_opt} ${filename}
		fi
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值