This is an old revision of the document!
Useful Custom Commands
This is list of custom commands that users of WinSCP found useful. You are encouraged to add your own. Also check the built-in examples.
Advertisement
- Archiving
- Quick Deleting
- Deleting on Background
- Changing Ownership
- Changing Modification Date/Time
- Recursively Changing Permissions of Files or Folders only
- Templates
- Viewing End of a File (log)
- Searching for a File
- Searching for a text/string within a directory
- Backup
- Remote Transfer (FXP)
- File Compare
- Suppressing Errors
Advertisement
Archiving
Extensions
Tar/Gzip
tar -xvzf --directory="!?&Extract to which directory:?.!" "!"
tar -czvf "!?&Enter an Archive Name:?archive.tgz!" --exclude="!?&Exclude files matching pattern:?*.exe!" !&
Gzip
gunzip -f "!"
Zip
To unpack to the current directory:
unzip -o "!"
To unpack to an alternate directory:
unzip -o -d "!?&Extract to directory:?.!" "!"
To create an archive:
zip -r "!?&Enter an Archive Name:?archive.zip!" !&
Rar
rar a -ep "!?&Enter an Archive Name:?archive.rar!" !&
Advertisement
Quick Deleting
Use following command to quickly delete large directory structures:
rm -f -r "!"
The same command can ask for confirmation before deleting:
test "!?Do you really want to delete ?no!" == "yes" && rm -rf !&
Both above solutions require a shell access. If you do not have it, use the following solution.
Deleting on Background
Use the following command to delete a large directory structure in a separate process:
cmd /C start "" cmd /C ""%WINSCP_PATH%\WinSCP.com" /command "open !E" "cd !/" "rm !&" "exit" & "%WINSCP_PATH%\WinSCP.exe" "!E" /refresh "!/""
Check custom command options Local command, Apply to directories and Use remote files.
Changing Ownership
Use following command if current protocol does not allow changing ownership:
chown "!?New owner:?!" !&
To change group use chgrp
instead of chown
. Or use following command:
chown "!?New owner (and group: user:group):!" !&
or with two separate prompts:
chown -R "!?New owner:?!":"!?New group:?!" !&
Changing Modification Date/Time
touch -d "!?Date:!" !&
Advertisement
Recursively Changing Permissions of Files or Folders only
For changing directory permissions:
find ! -type d -exec chmod !?&Permissions:?755! {} \;
For changing file permissions:
find ! -type f -exec chmod !?&Permissions:?644! {} \;
Check custom command options Remote command and Apply to directories.
Templates
cp /path/to/template.html "!?&New HTML file:?!"
Viewing End of a File (log)
In Console Window
tail "!"
You may specify further how much to transfer, e.g.
tail --lines 2000 "!"
Check custom command option Show results in terminal.
Continuously in Separate Window
cmd /C start "!@:!/!" "%ProgramFiles%\PuTTY\plink.exe" -P !# !U@!@ tail -f "!/!"
Check custom command options Local command and Use remote files.
Searching for a File
find . -name "!?Search for files:?!"
Check custom command option Show results in terminal.
Advertisement
Searching for a text/string within a directory
grep -H -r "!?Search for text:?!" * | cut -d: -f1
Check custom command option Show results in terminal.
Backup
Backup a File with Current Date and Time
cp ! $(echo "!" | sed "s/\..*$//").$(date '+%Y-%m-%d_%H-%M').$(echo ! | awk -F"." '{ print $NF }')
Rename a File with Current Date and Time
mv ! $(echo "!" | sed "s/\..*$//").$(date '+%Y-%m-%d_%H-%M').$(echo ! | awk -F"." '{ print $NF }')
Remote Transfer (FXP)
Use following remote custom command to transfer selected remote files to an another server:
scp -p -r !& !?Username:?!@!?Host:?!:!?Destination path:?!
You may want to hard-code the Username and Host, if you work with one destination server only. Or you can use a single prompt for both (possibly even for Destination Path) to keep the flexibility, yet to reduce number of prompts:
scp -p -r !& !?Username@Host:?!:!?Destination path:?!
Note that you need to ensure you can connect and authenticate to the destination server without any prompts:
- Connect at least once from an interactive terminal (such as PuTTY SSH client) to verify the destination server host key.
- Use for example Agent forwarding to forward your private key to the destination server for authentication.
- Another less-secure method of authentication is use of
sshpass
tool (see its man page).
File Compare
Note that WinMerge and other major diff tools are supported by official Compare files extension. The following is just an example how to use other diff tools.
WinMerge
Select Local command type.
Advertisement
"C:\Program Files (x86)\WinMerge\WinMergeU.exe" /e /x /u "!" "!^!"
Replace C:\Program Files (x86)
with C:\Program Files
on 32-bit system.
Arguments:
/e
– Enables you to close WinMerge with a singleEsc
key press;/x
– Closes WinMerge (after displaying an information dialog) when you start a comparison of identical files;/u
– Prevents WinMerge from adding either path (left or right) to the Most Recently Used (MRU) list.
Suppressing Errors
WinSCP will display error message, when the custom command returns exit code different than 0 or 1; or prints a message on error output, but no normal output.
To suppress the error message:
- Redirect error output to
/dev/null
, to discard it:
command_that_prints_non_interesting_progress_on_error_output > /dev/null
- Redirect error output to standard output, to see it in terminal, but avoid error message:
command_that_prints_interesting_info_on_error_output 2>&1
- Use
|| true
to discard exit code:
command_that_returns_255_code || true
- Or combine these together:
command_that_prints_interesting_info_on_error_output_and_returns_255_code 2>&1 || true