gpt4 book ai didi

linux - 查找命令不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:48 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com