Differences

This shows you the differences between the selected revisions of the page.

custom_commands 2019-08-01 custom_commands 2024-10-08 (current)
Line 7: Line 7:
==== Extensions ==== ==== Extensions ====
-  * [[library_example_zip_and_upload|Pack files to ZIP archive and upload it]] +  * [[library_example_zip_and_upload|*]] 
-  * [[extension_archive_and_download|Archive remote files to ZIP archive, download it, and optionally extract it]]+  * [[extension_archive_and_download|*]]
==== Tar/Gzip ==== ==== Tar/Gzip ====
-··tar -xvzf --directory="!?&Extract to which directory:?.!" "!"+<code custom-command-remote> 
 +tar -xvzf --directory="!?&Extract to which directory:?.!" "!"
 +</code>;
-··tar -czvf "!?&Enter an Archive Name:?archive.tgz!" +<code custom-command-remote> 
- ···--exclude="!?&Exclude files matching pattern:?*.exe!" +tar -czvf "!?&Enter an Archive Name:?archive.tgz!" 
- ···!&+ ·--exclude="!?&Exclude files matching pattern:?*.exe!" 
 + ·!&
 +</code>;
==== [[gzip]] Gzip ==== ==== [[gzip]] Gzip ====
-··gzip -f "!"+<code custom-command-remote> 
 +gzip -f "!"
 +</code>;
-··gunzip -f "!"+<code custom-command-remote> 
 +gunzip -f "!"
 +</code>;
==== [[zip]] Zip ==== ==== [[zip]] Zip ====
Line 27: Line 35:
To unpack to the current directory: To unpack to the current directory:
-··unzip "!"+<code custom-command-remote> 
 +unzip -o "!"
 +</code>;
To unpack to an alternate directory: To unpack to an alternate directory:
-··unzip -d "!?&Extract to directory:?.!" "!"+<code custom-command-remote> 
 +unzip -o -d "!?&Extract to directory:?.!" "!"
 +</code>;
To create an archive: To create an archive:
-··zip -r "!?&Enter an Archive Name:?archive.zip!" !&+<code custom-command-remote> 
 +zip -r "!?&Enter an Archive Name:?archive.zip!" !&
 +</code>;
-==== Rar ====+==== [[rar]] Rar ====
-··rar a -ep "!?&Enter an Archive Name:?archive.rar!" !&+<code custom-command-remote> 
 +rar a -ep "!?&Enter an Archive Name:?archive.rar!" !&
 +</code>;
===== [[delete]] Quick Deleting ===== ===== [[delete]] Quick Deleting =====
Line 45: Line 61:
Use following command to quickly delete large directory structures: Use following command to quickly delete large directory structures:
-<code>rm -f -r "!"</code>+<code custom-command-remote> 
 +rm -f -r "!" 
 +</code>
The same command can ask for confirmation before deleting: The same command can ask for confirmation before deleting:
-<code>test "!?Do you really want to delete ?no!" == "yes" && rm -rf !&</code>+<code custom-command-remote> 
 +test "!?Do you really want to delete ?no!" == "yes" && rm -rf !& 
 +</code> 
 + 
 +Both above solutions require a shell access. If you do not have it, use the following solution.
===== [[delete_background]] Deleting on Background ===== ===== [[delete_background]] Deleting on Background =====
Line 55: Line 77:
Use the following command to delete a large directory structure in a separate process: Use the following command to delete a large directory structure in a separate process:
-<code>cmd.exe /c start "" cmd /c ""C:\Program Files (x86)\WinSCP\WinSCP.com" /command "open !E" "cd !/" "rm !&" "exit" & "C:\Program Files (x86)\WinSCP\WinSCP.exe" "!E" /refresh "!/""</code> &winpath +<code custom-command-local> 
- +cmd /C start "" cmd /C ""%WINSCP_PATH%\WinSCP.com" /command "open !E" "cd !/" "rm !&" "exit" & "%WINSCP_PATH%\WinSCP.exe" "!E" /refresh "!/"" 
-Replace ''C:\Program Files (x86)'' with ''C:\Program Files'' on 32-bit systems. &winpath &win32 &win64+</code> &winpath
Check custom command options //Local command//, //Apply to directories// and //Use remote files//. Check custom command options //Local command//, //Apply to directories// and //Use remote files//.
Line 65: Line 87:
Use following command if current [[protocols|protocol]] does not allow changing ownership: Use following command if current [[protocols|protocol]] does not allow changing ownership:
-<code>chown "!?New owner:?!" !&</code>+<code custom-command-remote> 
 +chown "!?New owner:?!" !& 
 +</code>
To change group use ''chgrp'' instead of ''chown''. Or use following command: To change group use ''chgrp'' instead of ''chown''. Or use following command:
-<code>chown "!?New owner (and group: user:group):!" !&</code>+<code custom-command-remote> 
 +chown "!?New owner (and group: user:group):!" !& 
 +</code>
or with two separate prompts: or with two separate prompts:
-<code>chown -R "!?New owner:?!":"!?New group:?!" !&</code>+<code custom-command-remote> 
 +chown -R "!?New owner:?!":"!?New group:?!" !& 
 +</code>
 +===== [[time]] Changing Modification Date/Time =====
-===== [[url]] URL Address of Selected File ===== +<code custom-command-remote&gt
-==== Using Local Command ==== +touch -d &quot;!?Date:!" !&amp
-Example shows how to use local custom command that maps file path to URL. +</code>
- +
-<code>!`cmd.exe /c echo @echo off > %TEMP%\url.bat &  +
-echo set FILE_PATH=%1 >> %TEMP%\url.bat &  +
-echo echo https://www.example.com%FILE_PATH:home/user/public_html=~user% >> %TEMP%\url.bat` +
-cmd.exe /c %TEMP%\url.bat !/! & pause</code> +
- +
-Hints: +
- +
-  * Note that the above should be entered as one line! +
-  * Check custom command options //Local command// and //Use remote files//. +
-  * If you want to copy the %%URL%% to clipboard instead of displaying it, replace the trailing ''&amp; pause'' with ''| clip''. +
-··* For your particular use, just replace ''%%https://www.example.com%%'' with right %%URL%% prefix, ''home/user/public_html'' with right path prefix and ''~user'' with right %%URL%% replacement (it can even be empty in some cases). +
- +
-==== Using Remote PHP Code ==== +
-Example shows how to launch simple PHP script that maps file path to URL. +
- +
-&lt;code>echo '<?="https://www.example.com".str_replace("home/user/public_html", "~user", "'`pwd`'")."/!\n&quot;?>' | php -q</code>+
- +
-Hints: +
- +
-  * Note that the above should be entered as one line! +
-  * Do not forget to check custom command option //Show results in terminal// or //Copy results to clipboard//, otherwise you will not get the results. You may also want to use the command for directories, check //Apply to directories// too. +
-  * For your particular use, just replace ''%%https://www.example.com%%'' with right URL prefix, ''home/user/public_html'' with right path prefix and ''~user'' with right %%URL%% replacement (it can even be empty in some cases). +
-  * If you do mapping like above, i.e. for server containing multiple user's homepages, you can make it universal by replacing ''user'' with ''%%'`whoami`'%%''. +
- +
-==== Using Remote Shell Code ==== +
- +
-Another example using shell commands only, in case PHP is not available: +
- +
-<code>echo 'https://www.example.com'`pwd`'/!' | sed s#home/user/public_html#~user#</code>+
 +===== [[chmod]] Recursively Changing Permissions of Files or Folders only =====
 +For changing directory permissions:
 +<code custom-command-remote>
 +find ! -type d -exec chmod !?&Permissions:?755! {} \;
 +</code>
 +For changing file permissions:
 +<code custom-command-remote>
 +find ! -type f -exec chmod !?&Permissions:?644! {} \;
 +</code>
 +Check custom command options //Remote command// and //Apply to directories//.
===== Templates ===== ===== Templates =====
-··cp /path/to/template.html "!?&New HTML file:?!"+<code custom-command-remote> 
 +cp /path/to/template.html "!?&New HTML file:?!"
 +</code>;
===== [[tail]] Viewing End of a File (log) ===== ===== [[tail]] Viewing End of a File (log) =====
Line 119: Line 130:
==== In Console Window ==== ==== In Console Window ====
-··tail "!"+<code custom-command-remote> 
 +tail "!"
 +</code>;
You may specify further how much to transfer, e.g. You may specify further how much to transfer, e.g.
-··tail --lines 2000 "!"+<code custom-command-remote> 
 +tail --lines 2000 "!"
 +</code>;
Check custom command option //Show results in terminal//. Check custom command option //Show results in terminal//.
Line 129: Line 144:
==== Continuously in Separate Window ==== ==== Continuously in Separate Window ====
-··cmd /C start "!@:!/!" "%ProgramFiles%\PuTTY\plink.exe" -P !# !U@!@ tail -f "!/!"··+<code custom-command-local> 
 +cmd /C start "!@:!/!" "%ProgramFiles%\PuTTY\plink.exe" -P !# !U@!@ tail -f "!/!" 
 +</code>
Check custom command options //Local command// and //Use remote files//. Check custom command options //Local command// and //Use remote files//.
Line 135: Line 152:
===== [[search_file]] Searching for a File ===== ===== [[search_file]] Searching for a File =====
-··find . -name "!?Search for files:?!"+<code custom-command-remote> 
 +find . -name "!?Search for files:?!"
 +</code>;
Check custom command option //Show results in terminal//. Check custom command option //Show results in terminal//.
- 
- 
===== [[search_text]] Searching for a text/string within a directory ===== ===== [[search_text]] Searching for a text/string within a directory =====
-··grep -H -r "!?Search for text:?!" *  | cut -d: -f1+<code custom-command-remote> 
 +grep -H -r "!?Search for text:?!" *  | cut -d: -f1 
 +</code>
Check custom command option //Show results in terminal//. Check custom command option //Show results in terminal//.
Line 150: Line 169:
==== Backup a File with Current Date and Time ==== ==== Backup a File with Current Date and Time ====
-··cp ! $(echo "!" | sed "s/\..*$//").$(date '+%Y-%m-%d_%H-%M').$(echo ! | awk -F"." '{ print $NF }')+<code custom-command-remote> 
 +cp ! $(echo "!" | sed "s/\.[^.]*$//").$(date '+%Y-%m-%d_%H-%M').$(echo ! | awk -F"." '{ print $NF }') 
 +</code>
==== Rename a File with Current Date and Time ==== ==== Rename a File with Current Date and Time ====
-··mv ! $(echo "!" | sed "s/\..*$//").$(date '+%Y-%m-%d_%H-%M').$(echo ! | awk -F"." '{ print $NF }')+<code custom-command-remote> 
 +mv ! $(echo "!" | sed "s/\.[^.]*$//").$(date '+%Y-%m-%d_%H-%M').$(echo ! | awk -F"." '{ print $NF }') 
 +</code>
===== [[fxp]] Remote Transfer (FXP) ===== ===== [[fxp]] Remote Transfer (FXP) =====
Line 159: Line 182:
Use following remote custom command to transfer selected remote files to an another server: Use following remote custom command to transfer selected remote files to an another server:
-··scp -p -r !& !?Username:?!@!?Host:?!:!?Destination path:?!+<code custom-command-remote> 
 +scp -p -r !& !?Username:?!@!?Host:?!:!?Destination path:?! 
 +</code>
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: 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:?!+<code custom-command-remote> 
 +scp -p -r !& !?Username@Host:?!:!?Destination path:?! 
 +</code>
Note that you need to ensure you can connect and authenticate to the destination server without any prompts: 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 [[&url(putty)|PuTTY SSH client]]) to verify the destination server host key.   * Connect at least once from an interactive terminal (such as [[&url(putty)|PuTTY SSH client]]) to verify the destination server host key.
  * Use for example [[ui_login_authentication#forwarding|Agent forwarding]] to forward your private key to the destination server for authentication.   * Use for example [[ui_login_authentication#forwarding|Agent forwarding]] to forward your private key to the destination server for authentication.
-  * Another less-secure method of authentication is use of ''[[https://sourceforge.net/projects/sshpass/|sshpass]]'' tool (see its [[&amp;man_ref(1,sshpass)|man page]]).+  * Another less-secure method of authentication is use of ''[[https://sourceforge.net/projects/sshpass/|sshpass]]'' tool (see its [[https://www.mankier.com/1/sshpass|man page]]).
===== [[compare]] File Compare ===== ===== [[compare]] File Compare =====
 +
 +Note that WinMerge and other major diff tools are supported by official [[extension_compare_files|*]]. The following is just an example how to use other diff tools.
==== WinMerge ==== ==== WinMerge ====
Line 176: Line 205:
Select //Local command// [[custom_command#types|type]]. Select //Local command// [[custom_command#types|type]].
-··"C:\Program Files (x86)\WinMerge\WinMergeU.exe" /e /x /u "!" "!^!"+<code custom-command-local> 
 +"C:\Program Files (x86)\WinMerge\WinMergeU.exe" /e /x /u "!" "!^!"
 +</code>;
Replace ''C:\Program Files (x86)'' with ''C:\Program Files'' on 32-bit system. &winpath &win32 &win64 Replace ''C:\Program Files (x86)'' with ''C:\Program Files'' on 32-bit system. &winpath &win32 &win64
Line 194: Line 225:
  * Redirect error output to ''/dev/null'', to discard it: \\ <code>   * Redirect error output to ''/dev/null'', to discard it: \\ <code>
command_that_prints_non_interesting_progress_on_error_output > /dev/null</code> command_that_prints_non_interesting_progress_on_error_output > /dev/null</code>
-  * Redirect error output to standard output, to see it in terminal, but avoid error message: \\ <code>+  * Redirect error output to standard output, to see it in terminal, but avoid error message: \\ <code custom-command-remote>
command_that_prints_interesting_info_on_error_output 2>&1</code> command_that_prints_interesting_info_on_error_output 2>&1</code>
-  * Use ''|| true'' to discard exit code: \\ <code>+  * Use ''|| true'' to discard exit code: \\ <code custom-command-remote>
command_that_returns_255_code || true</code> command_that_returns_255_code || true</code>
-  * Or combine these together: <code>+  * Or combine these together: <code custom-command-remote>
command_that_prints_interesting_info_on_error_output_and_returns_255_code 2>&1 || true</code> command_that_prints_interesting_info_on_error_output_and_returns_255_code 2>&1 || true</code>

Last modified: by martin