Macos 使用';猫;删除包含空格的文件名

Macos 使用';猫;删除包含空格的文件名,macos,shell,rsync,Macos,Shell,Rsync,我想在这里替换“cat”,这样源代码中的行项目就可以有空格,从而使这个Rsync脚本更易于移植(在OSX中) 请专家们提出建议,好吗?其他建议,以改善这也表示感谢!谢谢 丹 将文件名用引号括起来: cat "/tmp/path/file with spaces.txt" 类似地,在执行rsync时: rsync $options "$source" "$destin" 引号总是一个好主意。将文件名用引号括起来: cat "/tmp/path/file with spaces.txt" 类似

我想在这里替换“cat”,这样源代码中的行项目就可以有空格,从而使这个Rsync脚本更易于移植(在OSX中)

请专家们提出建议,好吗?其他建议,以改善这也表示感谢!谢谢


将文件名用引号括起来:

cat "/tmp/path/file with spaces.txt"
类似地,在执行rsync时:

rsync $options "$source" "$destin"

引号总是一个好主意。

将文件名用引号括起来:

cat "/tmp/path/file with spaces.txt"
类似地,在执行rsync时:

rsync $options "$source" "$destin"

引用总是一个好主意。

不要使用
cat
;使用
while
循环和
read

while read -r source; do
    echo "Source:      $source"
    echo "Destination: $destin"
    echo "rsync" $options $source $destin
    if ! /opt/local/bin/rsync $options "$source" "$destin"; then
        echo "ERROR: rsync $source failed with code $?"
    fi

    echo "-----------------------------------------------"
    date "+%a %m-%d-%y %H:%M:%S"
    echo "-----------------------------------------------"

done < /tmp/list.dat
读取-r源时;做
echo“源:$Source”
echo“目的地:$destin”
echo“rsync”$options$source$destin
如果/opt/local/bin/rsync$options“$source”“$destin”;然后
echo“错误:rsync$源失败,代码为$?”
fi
回声“----------------------------------------------------”
日期“+%a%m-%d-%y%H:%m:%S”
回声“----------------------------------------------------”
完成
不要使用
cat
;使用
while
循环和
read

while read -r source; do
    echo "Source:      $source"
    echo "Destination: $destin"
    echo "rsync" $options $source $destin
    if ! /opt/local/bin/rsync $options "$source" "$destin"; then
        echo "ERROR: rsync $source failed with code $?"
    fi

    echo "-----------------------------------------------"
    date "+%a %m-%d-%y %H:%M:%S"
    echo "-----------------------------------------------"

done < /tmp/list.dat
读取-r源时;做
echo“源:$Source”
echo“目的地:$destin”
echo“rsync”$options$source$destin
如果/opt/local/bin/rsync$options“$source”“$destin”;然后
echo“错误:rsync$源失败,代码为$?”
fi
回声“----------------------------------------------------”
日期“+%a%m-%d-%y%H:%m:%S”
回声“----------------------------------------------------”
完成
以下是完成的工作脚本,供感兴趣的人使用:

#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH

EMAILSUBJ="Rsync Results"
EMAILRECIP="admin@example.com"
EMAILSENDER="admin@example.com"
LOG="/Users/jdoe/Desktop/rsync-`/bin/date +%m%d%Y`.log"
EXCLUDELIST="/tmp/exclude.dat"
SOURCEFILE="/tmp/list.dat"
DESTINATION='/Users/jdoe/Desktop/DEST/'
RSYNC=/opt/local/bin/rsync
# Rsync options below:
ROPTIONS=(
    -aNHxEh
    --delete 
    --fileflags 
    --exclude-from=$EXCLUDELIST 
    --delete-excluded 
    --force-change 
    --stats 
    --protect-args
    )
# Get started
{
echo "-----------------------------------------------"
echo "Start:" $0
echo "-----------------------------------------------"
date "+%a %m-%d-%y %H:%M:%S" 
echo "-----------------------------------------------"

while IFS= read -r SOURCE; do


   echo "SOURCE: $SOURCE"
   echo "DESTINATION: $DESTINATION"

   echo "rsync" "${ROPTIONS[@]}" $SOURCE $DESTINATION
   $RSYNC "${ROPTIONS[@]}" "$SOURCE" "$DESTINATION"

  RETCODE=$?
      if [ $RETCODE -gt 0 ]
              then
                 echo " "
                 echo "##########################################################"
                 echo "ERROR: rsync " $SOURCE "FAILED with code " $RETCODE
                 echo "##########################################################"
                 echo " "
              fi

echo "-----------------------------------------------"
date "+%a %m-%d-%y %H:%M:%S"
echo "-----------------------------------------------"

done < $SOURCEFILE                                       

echo "-----------------------------------------------"
echo "End:" $0
echo "-----------------------------------------------"



} >> $LOG 2>&1

# Send an email
(
echo "From: $EMAILSENDER"
echo "To: $EMAILRECIP"
echo "Subject: $EMAILSUBJ"
cat $LOG

) | /usr/sbin/sendmail -it 

exit 0
#/bin/bash
路径=/bin:/usr/bin:/sbin:/usr/sbin导出路径
emailsub=“Rsync结果”
EMAILRECIP=”admin@example.com"
电子邮件发件人=”admin@example.com"
LOG=“/Users/jdoe/Desktop/rsync-`/bin/date+%m%d%Y`.LOG”
EXCLUDELIST=“/tmp/exclude.dat”
SOURCEFILE=“/tmp/list.dat”
DESTINATION='/Users/jdoe/Desktop/DEST/'
RSYNC=/opt/local/bin/RSYNC
#Rsync选项如下:
落差=(
-安赫
--删除
--文件标志
--exclude from=$EXCLUDELIST
--删除排除
--力量变化
--统计数据
--保护args
)
#开始
{
回声“----------------------------------------------------”
echo“开始:$0
回声“----------------------------------------------------”
日期“+%a%m-%d-%y%H:%m:%S”
回声“----------------------------------------------------”
当IFS=读取-r源时;执行
echo“源:$SOURCE”
回显“目的地:$DESTINATION”
回显“rsync”“${ROPTIONS[@]}”$SOURCE$DESTINATION
$RSYNC“${ROPTIONS[@]}”“$SOURCE”“$DESTINATION”
RETCODE=$?
如果[$RETCODE-gt 0]
然后
回声“”
在现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方########################
echo“错误:rsync“$SOURCE”失败,代码为“$RETCODE”
在现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方########################
回声“”
fi
回声“----------------------------------------------------”
日期“+%a%m-%d-%y%H:%m:%S”
回声“----------------------------------------------------”
完成<$SOURCEFILE
回声“----------------------------------------------------”
回音“结束:$0
回声“----------------------------------------------------”
}>>$LOG 2>&1
#发送电子邮件
(
回显“发件人:$EMAILSENDER”
echo“收件人:$EMAILRECIP”
echo“主题:$emailsub”
cat$LOG
)|/usr/sbin/sendmail-it
出口0

以下是完成的工作脚本,供感兴趣的人使用:

#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH

EMAILSUBJ="Rsync Results"
EMAILRECIP="admin@example.com"
EMAILSENDER="admin@example.com"
LOG="/Users/jdoe/Desktop/rsync-`/bin/date +%m%d%Y`.log"
EXCLUDELIST="/tmp/exclude.dat"
SOURCEFILE="/tmp/list.dat"
DESTINATION='/Users/jdoe/Desktop/DEST/'
RSYNC=/opt/local/bin/rsync
# Rsync options below:
ROPTIONS=(
    -aNHxEh
    --delete 
    --fileflags 
    --exclude-from=$EXCLUDELIST 
    --delete-excluded 
    --force-change 
    --stats 
    --protect-args
    )
# Get started
{
echo "-----------------------------------------------"
echo "Start:" $0
echo "-----------------------------------------------"
date "+%a %m-%d-%y %H:%M:%S" 
echo "-----------------------------------------------"

while IFS= read -r SOURCE; do


   echo "SOURCE: $SOURCE"
   echo "DESTINATION: $DESTINATION"

   echo "rsync" "${ROPTIONS[@]}" $SOURCE $DESTINATION
   $RSYNC "${ROPTIONS[@]}" "$SOURCE" "$DESTINATION"

  RETCODE=$?
      if [ $RETCODE -gt 0 ]
              then
                 echo " "
                 echo "##########################################################"
                 echo "ERROR: rsync " $SOURCE "FAILED with code " $RETCODE
                 echo "##########################################################"
                 echo " "
              fi

echo "-----------------------------------------------"
date "+%a %m-%d-%y %H:%M:%S"
echo "-----------------------------------------------"

done < $SOURCEFILE                                       

echo "-----------------------------------------------"
echo "End:" $0
echo "-----------------------------------------------"



} >> $LOG 2>&1

# Send an email
(
echo "From: $EMAILSENDER"
echo "To: $EMAILRECIP"
echo "Subject: $EMAILSUBJ"
cat $LOG

) | /usr/sbin/sendmail -it 

exit 0
#/bin/bash
路径=/bin:/usr/bin:/sbin:/usr/sbin导出路径
emailsub=“Rsync结果”
EMAILRECIP=”admin@example.com"
电子邮件发件人=”admin@example.com"
LOG=“/Users/jdoe/Desktop/rsync-`/bin/date+%m%d%Y`.LOG”
EXCLUDELIST=“/tmp/exclude.dat”
SOURCEFILE=“/tmp/list.dat”
DESTINATION='/Users/jdoe/Desktop/DEST/'
RSYNC=/opt/local/bin/RSYNC
#Rsync选项如下:
落差=(
-安赫
--删除
--文件标志
--exclude from=$EXCLUDELIST
--删除排除
--力量变化
--统计数据
--保护args
)
#开始
{
回声“----------------------------------------------------”
echo“开始:$0
回声“----------------------------------------------------”
日期“+%a%m-%d-%y%H:%m:%S”
回声“----------------------------------------------------”
当IFS=读取-r源时;执行
echo“源:$SOURCE”
回显“目的地:$DESTINATION”
回显“rsync”“${ROPTIONS[@]}”$SOURCE$DESTINATION
$RSYNC“${ROPTIONS[@]}”“$SOURCE”“$DESTINATION”
RETCODE=$?
如果[$RETCODE-gt 0]
然后
回声“”
在现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方########################
echo“错误:rsync“$SOURCE”失败,代码为“$RETCODE”
在现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方########################
回声“”
fi
回声“----------------------------------------------------”
日期“+%a%m-%d-%y%H:%m:%S”
回声“----------------------------------------------------”
完成<$SOURCEFILE
回声“----------------------------------------------------”
回音“结束:$0
回声“----------------------------------------------------”
}>>$LOG 2>&1
#发送电子邮件
(
回显“发件人:$EMAILSENDER”
echo“收件人:$EMAILRECIP”
echo“主题:$emailsub”
cat$LOG
)|/usr/sbin/sendmail-it
出口0

我想他是问
/tmp/list.dat
中包含的文件名是否有空格,而不是正在读取的文件名。啊。嗯,他仍然需要在他的
rsync
中引用
$source
。我想他问的是
/tmp/list.dat
中包含的文件名是否有空格,而不是正在读取的文件名。啊。好吧,他仍然需要在他的
rsync
中引用
$source
。啊,这似乎现在起作用了。非常感谢。我在错误的地方完成了…干杯!啊,现在好像行了。非常感谢。我在错误的地方完成了…干杯!考虑使用数组来保存您的选项: