微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我必须做一个脚本,它将所有* .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 "\n\b")
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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐