linux - 查找命令不起作用

标签 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 中的唯一一行是:

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

当我运行它时。它确实有效,但正在尝试 查找/root/test/-name '*.txt' -exec cp {}/home/bucket/backupDev/test\;比是我的脚本中的输出。 在终端中,最后一行正在工作。

最佳答案

问题出在 pathConfig 文件中 '*.txt' 周围的引号。这将使 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"

关于linux - 查找命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35001272/

相关文章:

linux - linux 上的 shell 脚本无法运行

linux - 我可以使用 Google 翻译让我的 Raspberry Pi 按需说不同的语言吗?

用 perl 替换正则表达式 EOL 会产生意想不到的结果

ruby-on-rails - Rails - 急切加载关联记录的数量,但不是记录本身

linker - CMake : FIND_LIBRARY problem

c - 使用 FreeIPMI API 从 IPMI 获取所有 DIMM 信息

python - 如何在使用文件列表的 ffmpeg 流中查找当前流文件

sql - bash 脚本 curl 命令中的单引号不断转换为双引号

macos - 将整数附加到字符串 Bash 脚本 OSX

linux - 如何提高更改文件和文件夹权限的性能?