如何使用 WinSCP 压缩多个文件或文件夹并自动保留文件名部分?

如何使用 WinSCP 压缩多个文件或文件夹并自动保留文件名部分?

我正在使用 WinSCP,它可以选择远程使用自定义命令。

我想压缩一些文件和文件夹。WinSCP 有一个可以压缩文件或文件夹的命令,但我必须输入要调用的 zip 文件的名称。

zip -r "!?&Enter an Archive Name:?archive.zip!" !&

我想要一个命令,它可以获取文件的名称并将其用于 zip。

thisnewvideo.mp4成为thisnewvideo.zip

我有很多文件,因此输入每个标题都要花很长时间。

如果可能的话,我希望能够一次处理多个文件,并为每个文件或文件夹创建一个单独的 zip 文件,并保留原始文件或文件夹标题。

它需要是一个 zip 文件。

答案1

zip -r `echo ! | sed 's/\..*$/.zip/'` !

如果你想要多个 zip 文件,那也没关系

还有这样的怪物

ls -q !& > list_1239.txt; zip -9 "!?&FileName:?archive.zip!" $(cat list_1239.txt); rm list_1239.txt

如果你想要一个带有自定义名称的大 zip 文件

答案2

WinSCP 没有模式或任何其他机制来提取没有扩展名的文件名(或替换扩展名)。

无论如何,您可以使用服务器提供的任何功能来实现相同的目的。例如,您可以使用以下命令替换扩展sed

echo thisnewvideo.mp4 | sed 's/\..*$/.zip/'

这将输出:

 thisnewvideo.zip

您可以使用反引号运算符将其合并到 WinSCP 自定义命令中,例如:

zip -r `echo ! | sed 's/\..*$/.zip/'` !

请注意,该命令使用!图案。当您对一组选定的文件执行它时,它会对每个文件执行一次,并.zip为每个源文件生成一个文件。

替代方案请参见:在 Bash 中提取文件名和扩展名

请注意,我认为更好的(也更容易的)实现方法是将.zip扩展名(即thisnewvideo.mp4.zip)附加到文件名末尾,而不是替换扩展名。如果您有两个文件具有相同的基本名称,只是扩展名不同,则可以避免名称冲突。但我不知道您的限制。

相关内容