我已经使用普通命令在本地运行该命令。我现在需要它在使用 ftp 时运行。
我知道我需要使用“!”我需要使用 put 而不是复制,这样它就可以在液晶显示器上工作,但我不确定将“!”放在哪里。有人能给我指出一个好的教程或给我指出正确的方向吗?
我需要使用 put 而不是 Copy。
这是我的代码,可以在本地运行,但不能在 FTP 中运行:
#THE DIRECTORY THE ORIGINAL FILE IS STORED IN
MYDIR="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original"
#THE DIRECTORY THE BACKUP FILE WILL BE STORED IN
DEST="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1"
#FIND ALL DIRECTORIES AND NAME TEMP DIRECTORY AS CURRENT DIRECTORY UP TO MAX DEPTH (1 = 1 LEVEL DOWN)
find "${MYDIR}" -maxdepth 3 -type d | while read CURRENTDIRECTORY;
do
#FINDS THE NEWEST ZIP FILE IN T HE DIRECTORY
NEWESTFILE=`ls -dtr1 "${CURRENTDIRECTORY}"/*.zip | tail -n 1`
#CHECK IF FILE IS PRESENT
if [ -z "${NEWESTFILE}" ] ; then
echo "No file to copy"
#CHECK IF FILE IS A DIRECTORY
elif [ -d "${NEWESTFILE}" ] ; then
echo "Newest file is a directory"
#COPY NEWEST FILE TO DEST
else
dir=$(dirname "$CURRENTDIRECTORY")
mkdir -p "${DEST}$dir"
echo "Copying ${NEWESTFILE} --> ${DEST}$CURRENTDIRECTORY"
cp -p "${NEWESTFILE}" "${DEST}$CURRENTDIRECTORY/"
fi
done
#SORT FILES IN ORDER NEWEST FIRST AND IGNORE FIRST 2
ls -t1 "${DEST}"* | tail -n +3 | while read filename
do
#REMOVE THE REST
echo "remove $filename"
rm "$filename"
done
这是 FTP 代码,我想在其中嵌入上面的代码:
#ftp the file to another server
#FTP SERVER
HOST='server'
#USERNAME
USER='username'
#PASSWORD
PASSWD='password'
ftp -n -v $HOST << EOT
ascii
user $USER $PASSWD
prompt
cd backup
lcd $MYDIR
lcd Original
#BY HERE I WANT TO RUN THE OTHER CODE
bye
EOT
我5507 Segmentation fault: 11
在最后一行得到一个指向 EOT 的信息
答案1
使用以下命令在本地挂载 ftp 资源:
curlftpfs [user@]host:[dir] mountpoint [options]
并像本地文件系统一样做任何你喜欢的事情
答案2
复制命令并将其放入脚本中,将其命名为 filecheck.sh 之类的名称。所以脚本看起来像这样:
#!bin/bash
#THE DIRECTORY THE ORIGINAL FILE IS STORED IN
MYDIR="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original"
#THE DIRECTORY THE BACKUP FILE WILL BE STORED IN
DEST="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1"
#FIND ALL DIRECTORIES AND NAME TEMP DIRECTORY AS CURRENT DIRECTORY UP TO MAX DEPTH (1 = 1 LEVEL DOWN)
find "${MYDIR}" -maxdepth 3 -type d | while read CURRENTDIRECTORY;
do
#FINDS THE NEWEST ZIP FILE IN T HE DIRECTORY
NEWESTFILE=`ls -dtr1 "${CURRENTDIRECTORY}"/*.zip | tail -n 1`
#CHECK IF FILE IS PRESENT
if [ -z "${NEWESTFILE}" ] ; then
echo "No file to copy"
#CHECK IF FILE IS A DIRECTORY
elif [ -d "${NEWESTFILE}" ] ; then
echo "Newest file is a directory"
#COPY NEWEST FILE TO DEST
else
dir=$(dirname "$CURRENTDIRECTORY")
mkdir -p "${DEST}$dir"
echo "Copying ${NEWESTFILE} --> ${DEST}$CURRENTDIRECTORY"
cp -p "${NEWESTFILE}" "${DEST}$CURRENTDIRECTORY/"
fi
done
#SORT FILES IN ORDER NEWEST FIRST AND IGNORE FIRST 2
ls -t1 "${DEST}"* | tail -n +3 | while read filename
do
#REMOVE THE REST
echo "remove $filename"
rm "$filename"
done
使它可执行chmod +x filecheck.sh
,你可以远程运行这个脚本ssh [USER-NAME]@[REMOTE-HOST] filecheck.sh
我们将使用lftp,所以用你需要的任何东西安装它(你没有指定你的操作系统,但对于CentOS使用sudo yum install lftp
或Ubuntu / Mint使用sudo apt-get install lftp
创建一个名为something的新脚本像 upload.sh 并按如下方式填充它:
#!/bin/bash
# Create lftp script
[[ -d lftp ]]||mkdir lftp
script="ftp/html-update.scp"
hostname=your.hostname.com
user="Your_ftpuser_ID"
pass="Your_ftpuser_password"
echo "debug -o lftp/lftp-upload-debug.txt 5" > $script
echo "open -u $user,$pass $hostname" >> $script
rdir="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1"
ldir="local/path/where/you/want/the/copy/"
echo "cd $rdir" >> $script
echo "lcd $ldir" >> $script
echo asc >> $script
echo "put -a ${filename}" >> $script
echo "exit" >> $script
lftp -f "${script}" > ftp/lftpupload.log
如上所述,使用 chmod 使其可执行。 (同样,您可以像上面一样使用 ssh 远程执行它。)它从当前名为 ftp 的子目录中创建一个子目录,其中放置生成并由 lftp 使用的上传脚本。当 lftp 命令运行时,它还会将日志文件存储在其中,lftpupload.log 您可以在其中查看发生的情况。
您没有提供有关要复制到的本地位置的足够信息,因此我使用上面的 ${filename} 。您需要先提取它,或者只是更改脚本以复制该目录中的所有内容。
男人lftp很有用。我使用 lftp 更改 html 页面(大约 200 个)中的数据,然后创建并运行脚本来自动更新它们。使用此方法更改(例如)我所有网页页脚上的日期只需不到一分钟。
编辑:正如您最初要求的那样,您无法在 ftp 中运行 find 。但您可以远程运行 find 命令或脚本,然后创建 lftp 脚本来自动使用 lftp。