加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – bash – 排除“for file in $(find …)”中的目录

发布时间:2020-12-13 23:23:41 所属栏目:Linux 来源:网络整理
导读:我必须做一个脚本,它将所有* .txt文件从主目录复制到此脚本的第一个参数(${1})中指定的新创建的目录. 如果备份目录已存在,我想跳过它.我正在尝试排除查找中的-prune,但它对我不起作用.最后我在循环中做了if语句,这也行不通,我不知道为什么……谢谢你的帮助!!
我必须做一个脚本,它将所有* .txt文件从主目录复制到此脚本的第一个参数(${1})中指定的新创建的目录.

如果备份目录已存在,我想跳过它.我正在尝试排除查找中的-prune,但它对我不起作用.最后我在循环中做了if语句,这也行不通,我不知道为什么……谢谢你的帮助!!

这是我的代码:

#!/bin/bash

mkdir ${1}

for file in $(find ~/ -name *.txt)

do

    if [ ! -f ~/${1}/$file ]
    then
        cp -i -v $file -t ~/${1}
    fi

done

解决方法

您在代码中有错误,您正在创建目录:

mkdir ${1}

但是复制和测试不同的路径(-f~ / ${1} / $file,-t~ / ${1}).创建变量以防止此类错误:

#!/bin/bash
dest=~/${1}
[ -d "$dest" ] || mkdir "$dest"
SAVEIFS=$IFS
IFS=$(echo -en "nb")
for file in $(find ~/ -name '*.txt' -print)
do
  dfile="$dest/"$(basename "$file")
  if [ "$file" -ef "$dfile" ]; then
    echo same
  else
    cp -i -v "$file" -t "$dfile"
  fi  
done
IFS=$SAVEIFS

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读