Linux find命令没有';行不通
我尝试使用find查找和复制文件,但使用file中的参数Linux find命令没有';行不通,linux,bash,find,Linux,Bash,Find,我尝试使用find查找和复制文件,但使用file中的参数 #!/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
#!/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"
#/bin/bash
函数copyFiles(){
echo“find$1-name$2-exec cp”{}“$3\;”
查找$1-命名$2
查找$1-name$2-execcp“{}”$3\;
}
FILECONFIG=“/home/backupScript/pathConfig.txt”
DIRDATE=$(日期'+%Y-%m-%d');
DIRSCRIPTS=“/home/backupScript/”
而IFS=''读-r行| |[[-n“$line”];做
#echo“从文件读取的文本:$line”
设置--“$line”
IFS=“,”;声明-a元素=($*)
DAT1=“${ELEMENT[0]}”
DAT2=“${ELEMENT[1]}”
DAT3=“${ELEMENT[2]}”
PATHTO=${ELEMENT[2]}/$DIRDATE/
如果[!-d$PATHTO];然后
mkdir$PATHTO;
fi
回显“$DAT2”
复制文件$DAT1$DAT2$DAT3
查找$DAT1-名称“$DAT2”-exec cp“{}”$DAT3\;
完成<“$FILECONFIG”
FILECONFIG=“/home/backupScript/pathConfig.txt”
DIRDATE=$(日期'+%Y-%m-%d');
DIRSCRIPTS=“/home/backupScript/”
而IFS=''读-r行| |[[-n“$line”];做
#echo“从文件读取的文本:$line”
设置--“$line”
IFS=“,”;声明-a元素=($*)
DAT1=“${ELEMENT[0]}”
DAT2=“${ELEMENT[1]}”
DAT3=“${ELEMENT[2]}”
PATHTO=${ELEMENT[2]}/$DIRDATE/
如果[!-d$PATHTO];然后
mkdir$PATHTO;
fi
回显“$DAT2”
复制文件$DAT1$DAT2$DAT3
查找$DAT1-名称“$DAT2”-exec cp“{}”$DAT3\;
完成<“$FILECONFIG”
我的文件pathConfig.txt中唯一的一行是:
/root/test/,'*.txt',/home/bucket/backupDev/test
当我运行它时。它确实管用,但很努力
find/root/test/-name'*.txt'-exec cp{}/home/bucket/backupDev/test\;than是我脚本中的一个输出。
在终端中,它的工作是最后一行。问题是
路径配置文件中'*.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"
#/bin/bash
函数copyFiles(){
echo“find$1-name$2-exec cp”{}“$3\;”
查找“$1”-名称“$2”-print-exec cp”{}“$3”\;
}
FILECONFIG=“/home/backupScript/pathConfig.txt”
DIRDATE=$(日期'+%Y-%m-%d');
DIRSCRIPTS=“/home/backupScript/”
而IFS=''读-r行| |[[-n“$line”];做
#echo“从文件读取的文本:$line”
设置--“$line”
IFS=“,”;声明-a元素=($*)
DAT1=“${ELEMENT[0]}”
DAT2=“${ELEMENT[1]}”
DAT3=“${ELEMENT[2]}”
PATHTO=${ELEMENT[2]}/$DIRDATE/
如果[!-d“$PATHTO”];然后
mkdir“$PATHTO”;
fi
回显“$DAT2”
复制文件“$DAT1”$DAT2“$DAT3”
查找“$DAT1”-名称“$DAT2”-exec cp”{}“$DAT3”\;
完成<“$FILECONFIG”
如果您对find
有疑问,为什么您需要不止一行代码(只需调用find
)?有关构建最小复制器的指导,请参阅和。find命令不起作用
不是适当的问题主题。只要你不能证明它没有按照手册所描述的那样工作,让我们假设它可以工作,但你使用它的方式是错误的……而这段代码有很多错误。我建议把它通读一遍。此外,您可能会考虑到在流中唯一安全地用来定义UNIX路径名的字符是Nuls,因为任何其他字符(包括逗号和换行符)都可以存在于文件名内。为什么在代码< > DAT2赋值中双倍引号?为什么不在IFS=,read-r DAT1 DAT2 DAT3
时使用?