我尝试使用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 \;比我脚本中的输出。 在终端它的最后一行工作。
答案 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"