我正在使用 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
)附加到文件名末尾,而不是替换扩展名。如果您有两个文件具有相同的基本名称,只是扩展名不同,则可以避免名称冲突。但我不知道您的限制。