我在远程 Windows 系统上有一个包含大量文件和目录的大型目录,我只能通过 FTP 访问该目录。
我必须对一些文件进行一些修改,因此我下载了整个目录来运行在文件中递归查找和替换命令。
在本地使用 Git,我能够获取已修改文件的列表。(Windows 系统上没有 Git,因此我无法推送/拉取。此外,我只有 FTP 访问权限。)
现在我需要更新 Windows 系统上的文件。手动上传文件可能会很麻烦,因为有很多修改过的文件。
有些文件位于子目录和子子目录中。
例如这种结构(还有更多文件):
./
|--- file1
|--- file2
|--- dir1
| |--- file1.1
| |--- dir1.1
| |---- file1.1.1
|--- dir2
|--- file2.1
|--- file2.2
|--- file2.3
我如何才能将它们复制(或移动它们)到新位置,同时保留它们的目录结构。
这样,在我的 FTP 客户端中,我只需移动整个文件夹。它将自行管理目录结构。
请记住,子目录中还有其他未修改的文件,我不想复制这些文件。
Git 给了我这个列表,所以它完成了一半的工作:
file1
file2
dir1/file1.1
dir1/dir1.1/file1.1.1
dir2/file2.1
dir2/file2.2
dir2/file2.3
答案1
有趣的问题。我搜索了一下,所以这是另一种方法。当您有文件列表并且有很多文件要上传时。使用 wput。
apt-get install wput
cat /you/large/file/list | wput ftp:/host/ -i -
我建议打开详细输出-v
从手册页中:
-i file
--input-file=file
Reads URLs and filenames from file. ...
您还可以使用find
管道将文件名放入 wput 中。
find | wput ftp://host/ -i -
但是,请注意列表中的 shell 转义字符。
答案2
你为什么不使用curlftpfs
?我认为这比上传和下载整个目录结构更简单。
sudo apt-get install curlftpfs
挂载远程 ftp 文件系统:
curlftpfs -v user:[email protected]/path/ /mnt/
然后编辑或修改任何需要的内容,然后卸载文件系统。但请注意,文件系统非常慢。
编辑:~/.netrc
如果您的密码包含“@”等特殊字符,请使用以下格式的文件:
machine ftp-server.com
login user
password p@ssword
并通过以下方式挂载 fs:
curlftpfs -v ftp-server.com/path/ /mnt/
答案3
这就是我最终所做的,但如果有更好的方法,请添加为答案:
我将文件列表保存在一个文件中foo.log
并运行以下命令:
tar -zcf bar.tar.gz --files-from foo.log
当使用 归档时tar
,它会保持所添加文件的目录结构完整。
然后我bar.tar.gz
在一个空目录中解压了该文件:
mkdir tempdir
tar -zcf bar.tar.gz -C tempdir
# Delete the archive
rm bar.tar.gz
现在我修改的所有文件都被复制到tempdir