查找命令不起作用

时间:2016-01-25 20:02:34

标签: linux bash find

我尝试使用find查找和复制文件,但是使用文件中的参数。

#!/bin/bash

function copyFiles(){
    echo "find $1 -name $2 -exec cp "{}" $3 \;"
    find $1 -name $2
    find $1 -name $2 -exec cp "{}" $3 \;
}


FILECONFIG="/home/backupScript/pathConfig.txt"
DIRDATE=$(date '+%Y-%m-%d');
DIRSCRIPTS="/home/backupScript/"

while IFS='' read -r line || [[ -n "$line" ]]; do
        #echo "Text read from file: $line"
    set -- "$line"
    IFS=","; declare -a ELEMENT=($*)

    DAT1="${ELEMENT[0]}"
    DAT2=""${ELEMENT[1]}""
    DAT3="${ELEMENT[2]}"
    PATHTO=${ELEMENT[2]}/$DIRDATE/
    if [ ! -d $PATHTO ]; then
        mkdir $PATHTO;
    fi
    echo "$DAT2"
    copyFiles $DAT1 $DAT2 $DAT3
    find $DAT1 -name "$DAT2" -exec cp "{}" $DAT3 \;


done < "$FILECONFIG"



FILECONFIG="/home/backupScript/pathConfig.txt"
DIRDATE=$(date '+%Y-%m-%d');
DIRSCRIPTS="/home/backupScript/"

while IFS='' read -r line || [[ -n "$line" ]]; do
        #echo "Text read from file: $line"
    set -- "$line"
    IFS=","; declare -a ELEMENT=($*)

    DAT1="${ELEMENT[0]}"
    DAT2=""${ELEMENT[1]}""
    DAT3="${ELEMENT[2]}"
    PATHTO=${ELEMENT[2]}/$DIRDATE/
    if [ ! -d $PATHTO ]; then
        mkdir $PATHTO;
    fi
    echo "$DAT2"
    copyFiles $DAT1 $DAT2 $DAT3
    find $DAT1 -name "$DAT2" -exec cp "{}" $DAT3 \;


done < "$FILECONFIG"

我的文件pathConfig.txt中唯一的一行是:

/根/测试/,&#39; * TXT&#39;。,/家庭/桶/ backupDev /测试

当我跑的时候。它确实有效但尝试着 find / root / test / -name&#39; * .txt&#39; -exec cp {} / home / bucket / backupDev / test \;比我脚本中的输出。 在终端它的最后一行工作。

1 个答案:

答案 0 :(得分:0)

问题是'*.txt'文件中pathConfig周围的引号。这将使find命令仅匹配以'字符开头和结尾的名称。扩展变量后不会处理引号,它们会直接插入命令行。

因此,请将文件中的行更改为:

/root/test/,*.txt,/home/bucket/backupDev/test

但是,在使用变量时应该引用变量。

#!/bin/bash

function copyFiles(){
    echo "find $1 -name $2 -exec cp "{}" $3 \;"
    find "$1" -name "$2" -print -exec cp "{}" "$3" \;
}


FILECONFIG="/home/backupScript/pathConfig.txt"
DIRDATE=$(date '+%Y-%m-%d');
DIRSCRIPTS="/home/backupScript/"

while IFS='' read -r line || [[ -n "$line" ]]; do
        #echo "Text read from file: $line"
    set -- "$line"
    IFS=","; declare -a ELEMENT=($*)

    DAT1="${ELEMENT[0]}"
    DAT2="${ELEMENT[1]}"
    DAT3="${ELEMENT[2]}"
    PATHTO=${ELEMENT[2]}/$DIRDATE/
    if [ ! -d "$PATHTO" ]; then
        mkdir "$PATHTO";
    fi
    echo "$DAT2"
    copyFiles "$DAT1" "$DAT2" "$DAT3"
    find "$DAT1" -name "$DAT2" -exec cp "{}" "$DAT3" \;


done < "$FILECONFIG"