使用bash脚本在FTP服务器上批量重命名文件

时间:2014-09-07 19:29:39

标签: linux bash command-line awk ftp

我已经编写了一个简短的bash脚本来将文件上传到FTP服务器。我必须使用FTP ...我无法控制远程服务器。上传位按预期工作,所以现在我想集成一些代码来重命名(移动)" Live"将新文件上传到目录之前的目录。重命名命令不允许使用通配符或任何批处理,因此从我读过的内容中我需要循环它。

这是脚本。

#!/bin/bash

cd $UPLOADS
echo "open $SERVER
user $NAME $PASSWORD
binary
cd Live
ls > /tmp/$DIRLIST" > /tmp/ftp.$$
awk -F" " 'NR>2 {print $9} ' /tmp/$DIRLIST > /tmp/$MOD
cat /tmp/$MOD | while read tif  
do
echo "rename $tif ../Done/$tif" >> /tmp/ftp.$$
done
echo "mput *.tif
quit" >> /tmp/ftp.$$
ftp -pin < /tmp/ftp.$$
rm /tmp/ftp.$$

我已登录,将ls的结果发送到临时文件,该文件提供以下内容:

drwxrwxrwx   1 user     group           0 Sep  7 08:27 .
drwxrwxrwx   1 user     group           0 Sep  7 08:27 ..
-rw-rw-rw-   1 user     group     6506940 Sep  7 11:07 FILENAME1.tif
-rw-rw-rw-   1 user     group     6506940 Sep  6 10:21 FILENAME2.tif

然后运行awk,它给了我这个:

FILENAME1.tif
FILENAME2.tif

我现在获得它的方式的问题是我构建FTP命令并最后运行它们,所以awk首先运行。只有没有文件可以运行awk因为ls还没有写入temp($ DIRLIST)文件。

我可以让整个过程在一个脚本中运行吗?如果有,怎么做?我可以运行两个脚本,但不愿意。

更新

以下作品非常完美,但需要登录,退出,然后返回:

#!/bin/bash

# log in once to write current list of files to /tmp/$DIRLIST
ftp -pin $SERVER <<END_SCRIPT
user $NAME $PASSWORD
cd Live
ls > /tmp/$DIRLIST
quit
END_SCRIPT

# skip first two lines(. and ..) get a clean list of files
awk -F" " 'NR>2 {print $9} ' /tmp/$DIRLIST > /tmp/$MOD

# log back in rename existing files and upload new files
cd $UPLOADS
echo "open $SERVER
user $NAME $PASSWORD
binary
cd Live" > /tmp/ftp.$$
cat /tmp/$MOD | while read tif
do
echo "rename $tif ../Done/$tif" >> /tmp/ftp.$$
done
echo "mput *.tif
quit" >> /tmp/ftp.$$
ftp -pin < /tmp/ftp.$$

#cleanup
rm /tmp/ftp.$$
rm /tmp/$DIRLIST
rm /tmp/$MOD

1 个答案:

答案 0 :(得分:0)

这就是我的意思,将mput置于awk上方,以便在重命名命中之前连接文件时

#!/bin/bash

# log in once to write current list of files to /tmp/$DIRLIST
ftp -pin $SERVER <<END_SCRIPT
user $NAME $PASSWORD
cd Live
ls > /tmp/$DIRLIST 
quit
END_SCRIPT

# skip first two lines(. and ..) get a clean list of files
awk -F" " 'NR>2 {print $9} ' /tmp/$DIRLIST > /tmp/$MOD

# log back in rename existing files and upload new files
cd $UPLOADS
echo "open $SERVER
user $NAME $PASSWORD
binary
cd Live" > /tmp/ftp.$$
echo "mput *.tif
quit" >> /tmp/ftp.$$
cat /tmp/$MOD | while read tif
do
echo "rename $tif ../Done/$tif" >> /tmp/ftp.$$
done
ftp -pin < /tmp/ftp.$$

#cleanup
rm /tmp/ftp.$$
rm /tmp/$DIRLIST
rm /tmp/$MOD