2

Я использую WinSCP, и он имеет возможность удаленного использования пользовательских команд.

Я хочу заархивировать некоторые файлы и папки. WinSCP имеет команду, которая может заархивировать файл или папку, но я должен ввести имя для zip-файла, который будет вызван.

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

Я хотел бы команду, которая будет брать имя файла и использовать его для почтового индекса.

Т.е. thisnewvideo.mp4 должен стать thisnewvideo.zip .

У меня много файлов, поэтому ввод каждого заголовка займет много времени.

Если это возможно, я бы хотел иметь возможность создавать несколько файлов одновременно и создавать отдельный zip-файл для каждого файла или папки, сохраняя исходный заголовок файла или папки.

Это должен быть почтовый файл.

2 ответа2

0

WinSCP не имеет шаблона или какого-либо другого механизма для извлечения имени файла без расширения (или замены расширения).

В любом случае, вы можете использовать любую функцию, которую сервер предоставляет для достижения того же. Например, вы можете заменить расширение с помощью команды sed :

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

Это выведет:

 thisnewvideo.zip

Вы можете объединить это в пользовательскую команду WinSCP с помощью оператора backtick, например:

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

Обратите внимание, что команда использует !образец Когда вы выполняете его для набора выбранных файлов, он запускается один раз для каждого файла, создавая один файл .zip для каждого исходного файла.

Для альтернатив см .: Извлечь имя файла и расширение в Bash.

Обратите внимание, что я бы посчитал, что лучше (и проще) реализовать его, просто добавив расширение .zip (то есть thisnewvideo.mp4.zip) к концу имени файла, а не подставляя его. Вы бы избежали столкновения имен, если у вас есть два файла с одинаковым базовым именем, просто с другим расширением. Но я не знаю ваших ограничений.

0
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-файл с произвольным именем

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .