如何移动特定文件同时保留其目录结构

如何移动特定文件同时保留其目录结构

我在远程 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

相关内容