Ticket #4571: 0001-menu-drop-archaic-and-add-modern-archival-options.patch
File 0001-menu-drop-archaic-and-add-modern-archival-options.patch, 19.4 KB (added by eugenesan, 3 months ago) |
---|
-
misc/mc.menu.in
From c878596f40f5b5edc00ffac5eedf1cdd8f860d89 Mon Sep 17 00:00:00 2001 From: "Eugene San (eugenesan)" <eugenesan@gmail.com> Date: Thu, 22 Aug 2024 23:31:05 -0700 Subject: [PATCH] menu: drop archaic and add modern archival options --- misc/mc.menu.in | 417 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 303 insertions(+), 114 deletions(-) diff --git a/misc/mc.menu.in b/misc/mc.menu.in index 51880de7e..3a7d22907 100644
a b shell_patterns=0 20 20 # %f quote expanded macro 21 21 # %1f ditto 22 22 # %0f don't quote expanded macro 23 # 24 # Unused shortcuts: b, q, z 23 25 ############################################################################## 24 26 25 27 + ! t t … … shell_patterns=0 46 48 47 49 2 Call the info hypertext browser 48 50 info 51 = t d 52 y Pack the current subdirectory (tar) 53 Pwd=`basename %d /` 54 echo -n "Name of the tarball (without extension) [$Pwd]: " 55 read tar 56 [ "$tar"x = x ] && tar="$Pwd" 57 cd .. && \ 58 tar cf "$tar.tar" "$Pwd" && \ 59 echo "../$tar.tar created." 49 60 50 61 = t d 51 62 3 Compress the current subdirectory (tar.gz) … … shell_patterns=0 84 95 tar cf - "$Pwd" | xz -f > "$tar.tar.xz" && \ 85 96 echo "../$tar.tar.xz created." 86 97 98 ^ Compress the current subdirectory (tar.xz using 7z) 99 Pwd=`basename %d /` 100 echo -n "Name of the compressed file (without extension) [$Pwd]: " 101 read tar 102 [ "$tar"x = x ] && tar="$Pwd" 103 cd .. && \ 104 tar cf - "$Pwd" | 7z a -si -txz -m0=lzma2 -ms=on "$tar.tar.xz" 105 echo "../$tar.tar.xz created." 106 87 107 7 Compress the current subdirectory (tar.zst) 88 108 Pwd=`basename %d /` 89 109 echo -n "Name of the compressed file (without extension) [$Pwd]: " … … shell_patterns=0 102 122 tar cf - "$Pwd" | lzop -f > "$tar.tar.lzo" && \ 103 123 echo "../$tar.tar.lzo created." 104 124 125 9 Compress the current subdirectory (7z) 126 Pwd=`basename %d /` 127 echo -n "Name of the compressed file (without extension) [$Pwd]: " 128 read tar 129 [ "$tar"x = x ] && tar="$Pwd" 130 cd .. && \ 131 nice ionice -c3 7z a -m0=lzma2 "$tar.7z" "$tar" 132 echo "../$tar.7z created." 133 134 ( Compress & Encrypt the current subdirectory (7z) 135 Pwd=`basename %d /` 136 echo -n "Name of the compressed file (without extension) [$Pwd]: " 137 read tar 138 [ "$tar"x = x ] && tar="$Pwd" 139 cd .. && \ 140 nice ionice -c3 7z a -p -mhe -m0=lzma2 "$tar.7z" "$tar" 141 echo "../$tar.7z created." 142 105 143 = f \.c$ & t r 106 144 + f \.c$ & t r & ! t t 107 145 c Compile and link current .c file … … A Append files to opposite files 118 156 done 119 157 120 158 + t r & ! t t 121 d Delete file if a copy exists in the other directory .159 d Delete file if a copy exists in the other directory 122 160 if [ %d = %D ]; then 123 echo "The two directories must be different ."161 echo "The two directories must be different" 124 162 exit 1 125 163 fi 126 164 if [ -f %D/%f ]; then # if two of them, then 127 165 if cmp -s %D/%f %f; then 128 166 rm %f && echo %f": DELETED." 129 167 else 130 echo %f" and "%D/%f" differ: NOT deleted ."168 echo %f" and "%D/%f" differ: NOT deleted" 131 169 echo -n "Press RETURN " 132 170 read key 133 171 fi 134 172 else 135 echo %f": No copy in "%D/%f": NOT deleted ."173 echo %f": No copy in "%D/%f": NOT deleted" 136 174 fi 137 175 138 176 + t t 139 D Delete tagged files if a copy exists in the other directory .177 D Delete tagged files if a copy exists in the other directory 140 178 if [ %d = %D ]; then 141 echo "The two directories must be different ."179 echo "The two directories must be different" 142 180 exit 1 143 181 fi 144 182 for i in %t ; do … … D Delete tagged files if a copy exists in the other directory. 148 186 if [ "$SUM1" = "$SUM2" ]; then 149 187 rm "$i" && echo "${i}: DELETED." 150 188 else 151 echo "$i and "%D"/$i differ: NOT deleted ."189 echo "$i and "%D"/$i differ: NOT deleted" 152 190 fi 153 191 else 154 echo "$i has no copy in "%D": NOT deleted ."192 echo "$i has no copy in "%D": NOT deleted" 155 193 fi 156 194 done 157 195 158 m View manual page 196 m View manual page (native) 159 197 MAN=%{Enter manual name} 160 %view{ascii,nroff} MANROFFOPT='@MAN_FLAGS@' MAN_KEEP_FORMATTING=1 man -P cat "$MAN" 161 162 = f \.gz$ & t r 163 + ! t t 164 n Inspect gzip'ed newsbatch file 165 dd if=%f bs=1 skip=12 | zcat | ${PAGER-more} 166 # assuming the cunbatch header is 12 bytes long. 167 168 = t r & 169 + ! t t 170 h Strip headers from current newsarticle 171 CHECK=`awk '{print $1 ; exit}' %f` 2>/dev/null 172 case "$CHECK" in 173 Newsgroups:|Path:) 174 I=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1 175 cp %f "$I" && sed '/^'"$CHECK"' /,/^$/d' "$I" > %f 176 [ "$?" = "0" ] && rm "$I" 177 echo %f": header removed." 178 ;; 179 *) 180 echo %f" is not a news article." 181 ;; 182 esac 198 man "$MAN" 183 199 184 + t t 185 H Strip headers from the marked newsarticles 186 for i in %t ; do 187 CHECK=`awk '{print $1 ; exit}' "$i"` 2>/dev/null 188 WFILE=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1 189 case "$CHECK" in 190 Newsgroups:|Path:) 191 cp "$i" "$WFILE" && sed '/^'"$CHECK"' /,/^$/d' "$WFILE" > "$i" 192 if [ "$?" = "0" ]; then 193 rm "$WFILE"; echo "$i header removed. OK." 194 else 195 echo "Oops! Please check $i against $WFILE." 196 fi 197 ;; 198 *) 199 echo "$i skipped: Not a news article." 200 ;; 201 esac 202 done 200 M View manual page 201 MAN=%{Enter manual name} 202 %view{ascii,nroff} MANROFFOPT='@MAN_FLAGS@' MAN_KEEP_FORMATTING=1 man -P cat "$MAN" 203 203 204 204 = t r 205 205 + ! t t … … R Copy files to remote host (no error checking) 218 218 read Dir 219 219 rcp -pr %u "${Host}:${Dir}" 220 220 221 = f \.tex$ & t r 222 + f \.tex$ & t r & ! t t 223 t Run latex on file and show it with xdvi 224 latex %f && xdvi "`basename %f .tex`".dvi221 + ! t t 222 t Test compressed archive/image using 7z 223 i=%f 224 7z t -bb3 $i 225 225 226 =+ f ^part | f ^Part | f uue & t r227 226 + t t 228 U Uudecode marked news articles (needs work) 229 ( 230 for i in %t ; do # strip headers 231 FIRST=`awk '{print $1 ; exit}' "$i"` 232 cat "$i" | sed '/^'"$FIRST"' /,/^$/d' 233 done 234 ) | sed '/^$/d' | sed -n '/^begin 6/,/^end$/p' | uudecode 235 if [ "$?" != "0" ]; then 236 echo "Cannot decode "%t"." 237 fi 238 echo "Please test the output file before deleting anything." 227 t Test compressed archives/images using 7z 228 for i in %t ; do 229 7z t -bb3 $i 230 done 231 232 + ! t t 233 T List compressed archive/image using 7z 234 i=%f 235 7z l $i 236 237 + t t 238 T List compressed archives/images using 7z 239 for i in %t ; do 240 7z l $i 241 done 242 243 + ! t t 244 e Extract compressed archive/image using 7z 245 i=%f 246 7z x -bb3 "$i" 247 248 + t t 249 e Extract compressed archives/images using 7z 250 for i in %t ; do 251 7z x -bb3 "$i" 252 done 239 253 240 =+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.lzo$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.zst | f \.tar\.Z$ | f \.tar\.bz2$ & t rl 254 + ! t t 255 E Extract compressed archive/image to subdirs using 7z 256 i="%f" 257 d=`basename $i` 258 D="${d%.*}" 259 mkdir -p "$D" 260 7z x -bb3 -o"$D" "$i" 261 262 + t t 263 E Extract compressed archives/images to subdirs using 7z 264 for i in %t ; do 265 d=`basename $i` 266 D="${d%.*}" 267 mkdir -p "$D" 268 7z x -bb3 -o"$D" "$i" 269 done 270 271 =+ f \.tar$ | f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.lzo$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.txz$ | f \.tar\.zst | f \.tzst | f \.tar\.Z$ | f \.tar\.bz2 | f \.tbz2$ & t rl 241 272 x Extract the contents of a compressed tar file 242 273 unset PRG 243 274 case %f in 244 *.tar.7z) PRG="7za e -so";; 245 *.tar.bz2) PRG="bunzip2 -c";; 275 *.tar) PRG="";; 276 *.tar.7z) PRG="7z e -so";; 277 *.tar.bz2|*.tbz2) PRG="bunzip2 -c";; 246 278 *.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z) PRG="gzip -dc";; 247 279 *.tar.lz) PRG="lzip -dc";; 248 280 *.tar.lz4) PRG="lz4 -dc";; 249 281 *.tar.lzma) PRG="lzma -dc";; 250 282 *.tar.lzo) PRG="lzop -dc";; 251 *.tar.xz ) PRG="xz -dc";;252 *.tar.zst ) PRG="zstd -dc";;283 *.tar.xz|*.txz) PRG="xz -dc";; 284 *.tar.zst|*.tzst) PRG="zstd -dc";; 253 285 *) exit 1;; 254 286 esac 255 $PRG %f | tar xvf - 287 if [ -n "$PRG" ]; then 288 %f | tar xvf - 289 else 290 tar -xf %f 291 fi 256 292 257 = t r 258 + ! t t 259 y Gzip or gunzip current file 260 unset DECOMP293 + f \.tar$ | f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.lzo$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.txz$ | f \.tar\.zst | f \.tzst | f \.tar\.Z$ | f \.tar\.bz2 | f \.tbz2$ & t r & ! t t 294 X Extract compressed tar archive to subdirectory 295 unset D 296 unset PRG 261 297 case %f in 262 *.gz|*.[zZ]) DECOMP=-d;; 298 *.tar) PRG=""; D=`basename %f .tar`;; 299 *.tar.7z) PRG="7z e -so"; D=`basename %f .tar.7z`;; 300 *.tar.bz2) PRG="bunzip2 -c"; D=`basename %f .tar.bz2`;; 301 *.tbz2) PRG="bunzip2 -c"; D=`basename %f .tbz2`;; 302 *.tar.gz) PRG="gzip -dc"; D=`basename %f .tar.gz`;; 303 *.tar.z) PRG="gzip -dc"; D=`basename %f .tar.z`;; 304 *.tgz) PRG="gzip -dc"; D=`basename %f .tgz`;; 305 *.tpz) PRG="gzip -dc"; D=`basename %f .tpz`;; 306 *.tar.Z) PRG="gzip -dc"; D=`basename %f .tar.Z`;; 307 *.tar.lz) PRG="lzip -dc"; D=`basename %f .tar.lz`;; 308 *.tar.lz4) PRG="lz4 -dc"; D=`basename %f .tar.lz4`;; 309 *.tar.lzma) PRG="lzma -dc"; D=`basename %f .tar.lzma`;; 310 *.tar.lzo) PRG="lzop -dc"; D=`basename %f .tar.lzo`;; 311 *.tar.xz) PRG="xz -dc"; D=`basename %f .tar.xz`;; 312 *.txz) PRG="xz -dc"; D=`basename %f .txz`;; 313 *.tar.zst) PRG="zstd -dc"; D=`basename %f .tar.zst`;; 314 *.tzst) PRG="zstd -dc"; D=`basename %f .tzst`;; 315 *.tar.F) PRG="freeze -dc"; D=`basename %f .tar.F`;; 316 *) echo "Unsupported compression,"; exit 255;; 263 317 esac 264 # Do *not* add quotes around $DECOMP! 265 gzip $DECOMP -v %f 318 if [ -n "$PRG" ]; then 319 mkdir "$D"; cd "$D" && $PRG ../%f | tar xvf - 320 else 321 mkdir "$D"; cd "$D" && tar xvf ../%f 322 fi 266 323 267 324 + t t 268 Y Gzip or gunzip tagged files325 X Extract compressed tar archives to subdirectories 269 326 for i in %t ; do 270 unset DECOMP 327 unset D 328 unset PRG 271 329 case "$i" in 272 *.gz|*.[zZ]) DECOMP=-d;; 330 *.tar) PRG=""; D=`basename %f .tar`;; 331 *.tar.7z) PRG="7z e -so"; D=`basename %f .tar.7z`;; 332 *.tar.bz2) PRG="bunzip2 -c"; D=`basename %f .tar.bz2`;; 333 *.tbz2) PRG="bunzip2 -c"; D=`basename %f .tbz2`;; 334 *.tar.gz) PRG="gzip -dc"; D=`basename %f .tar.gz`;; 335 *.tar.z) PRG="gzip -dc"; D=`basename %f .tar.z`;; 336 *.tgz) PRG="gzip -dc"; D=`basename %f .tgz`;; 337 *.tpz) PRG="gzip -dc"; D=`basename %f .tpz`;; 338 *.tar.Z) PRG="gzip -dc"; D=`basename %f .tar.Z`;; 339 *.tar.lz) PRG="lzip -dc"; D=`basename %f .tar.lz`;; 340 *.tar.lz4) PRG="lz4 -dc"; D=`basename %f .tar.lz4`;; 341 *.tar.lzma) PRG="lzma -dc"; D=`basename %f .tar.lzma`;; 342 *.tar.lzo) PRG="lzop -dc"; D=`basename %f .tar.lzo`;; 343 *.tar.xz) PRG="xz -dc"; D=`basename %f .tar.xz`;; 344 *.txz) PRG="xz -dc"; D=`basename %f .txz`;; 345 *.tar.zst) PRG="zstd -dc"; D=`basename %f .tar.zst`;; 346 *.tzst) PRG="zstd -dc"; D=`basename %f .tzst`;; 347 *.tar.F) PRG="freeze -dc"; D=`basename %f .tar.F`;; 348 *) echo "Unsupported compression,"; exit 255;; 273 349 esac 274 gzip $DECOMP -v "$i" 350 if [ -n "$PRG" ]; then 351 mkdir "$D"; cd "$D" && $PRG ../%f | tar xvf - 352 else 353 mkdir "$D"; cd "$D" && tar xvf ../%f 354 fi 275 355 done 276 356 357 = t r 277 358 + ! t t 278 b Bzip2 or bunzip2current file359 u Compress-UnCompress (Gzip, Bzip2, XZ) current file 279 360 unset DECOMP 361 unset DEPROG 280 362 case %f in 281 *.bz2) DECOMP=-d;; 363 *.gz|*.[zZ]) DEPROG=gzip; DECOMP=-d;; 364 *.bz2) DEPROG=bzip2; DECOMP=-d;; 365 *.xz) DEPROG=xz; DECOMP=-d;; 282 366 esac 283 bzip2 $DECOMP -v %f 367 # Do *not* add quotes around $DECOMP! 368 $DEPROG $DECOMP -v %f 284 369 285 370 + t t 286 B Bzip2 or bunzip2tagged files371 u Compress-UnCompress (Gzip, Bzip2, XZ) tagged files 287 372 for i in %t ; do 288 373 unset DECOMP 374 unset DEPROG 289 375 case "$i" in 290 *.bz2) DECOMP=-d;; 376 *.gz|*.[zZ]) DEPROG=gzip; DECOMP=-d;; 377 *.bz2) DEPROG=bzip2; DECOMP=-d;; 378 *.xz) DEPROG=xz; DECOMP=-d;; 291 379 esac 292 bzip2$DECOMP -v "$i"380 $DEPROG $DECOMP -v "$i" 293 381 done 294 382 295 + f \.tar.gz$ | f \.tgz$ | f \.tpz$ | f \.tar.Z$ | f \.tar.z$ | f \.tar.bz2$ | f \.tar.F$ & t r & ! t t 296 z Extract compressed tar file to subdirectory 297 unset D 298 set gzip -cd 383 + ! t t 384 U Compress-UnCompress XZ (using 7z) current file 299 385 case %f in 300 *.tar.F) D=`basename %f .tar.F`; set freeze -dc;; 301 *.tar.Z) D=`basename %f .tar.Z`;; 302 *.tar.bz2) D=`basename %f .tar.bz2`; set bunzip2 -c;; 303 *.tar.gz) D=`basename %f .tar.gz`;; 304 *.tar.z) D=`basename %f .tar.z`;; 305 *.tgz) D=`basename %f .tgz`;; 306 *.tpz) D=`basename %f .tpz`;; 386 *.xz) xz -d -v %f;; 387 *) 7z -txz -m0=lzma2 -ms=on a %f.xz %f && test -r %f.xz && rm -vf %f;; 307 388 esac 308 mkdir "$D"; cd "$D" && ("$1" "$2" ../%f | tar xvf -)309 389 310 390 + t t 311 Z Extract compressed tar files to subdirectories391 U Compress-UnCompress XZ (using 7z) tagged files 312 392 for i in %t ; do 313 set gzip -dc 314 unset D 393 unset DECOMP 315 394 case "$i" in 316 *.tar.F) D=`basename "$i" .tar.F`; set freeze -dc;; 317 *.tar.Z) D=`basename "$i" .tar.Z`;; 318 *.tar.bz2) D=`basename "$i" .tar.bz2`; set bunzip2 -c;; 319 *.tar.gz) D=`basename "$i" .tar.gz`;; 320 *.tar.z) D=`basename "$i" .tar.z`;; 321 *.tgz) D=`basename "$i" .tgz`;; 322 *.tpz) D=`basename "$i" .tpz`;; 323 esac 324 mkdir "$D"; (cd "$D" && "$1" "$2" "../$i" | tar xvf -) 395 *.xz) xz -d -v "$i";; 396 *) 7z -txz -m0=lzma2 -ms=on a "$i.xz" "$i" && test -r "$i.xz" && rm -vf "$i";; 397 esac 325 398 done 326 399 327 400 + f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & ! t t … … C Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2 374 447 fi 375 448 done 376 449 450 + ! t t 451 j Convert any->xz (using 7z) 452 i=%f 453 case "$i" in 454 *.Z|*.bz2|*.gz|*.z|*.Z|*.bz2|*.tar.rar|*.tar.7z|*.zst) EXT=xz;; 455 *.tgz|*.tbz2|*.tzst|*.tpz) EXT=tar.xz;; 456 *) echo "Unsupported compression."; exit 255;; 457 esac 458 7z -so e ${i} | 7z -txz -m0=lzma2 -ms=on -si a ${i%.*}.${EXT} 459 460 + t t 461 j Convert any->xz (using 7z) 462 for i in %t ; do 463 case "$i" in 464 *.Z|*.bz2|*.gz|*.z|*.Z|*.bz2|*.tar.rar|*.tar.7z|*.zst) EXT=xz;; 465 *.tgz|*.tbz2|*.tzst|*.tpz|*.txz) EXT=tar.xz;; 466 *) echo "Unsupported compression."; exit 255;; 467 esac 468 7z -so e ${i} | 7z -txz -m0=lzma2 -ms=on -si a ${i%.*}.${EXT} 469 done 470 471 + ! t t 472 J Convert any->zst (using 7z+zstd) 473 i=%f 474 case "$i" in 475 *.Z|*.bz2|*.gz|*.z|*.Z|*.bz2|*.tar.rar|*.tar.7z|*.xz) EXT=zst;; 476 *.tgz|*.tbz2|*.tzst|*.tpz|*.txz) EXT=tar.zst;; 477 *) echo "Unsupported compression."; exit 255;; 478 esac 479 7z -so e ${i} | zstd --long --ultra -22 - -o ${i%.*}.${EXT} 480 481 + t t 482 J Convert any->zst (Using 7z+zstd) 483 for i in %t ; do 484 case "$i" in 485 *.Z|*.bz2|*.gz|*.z|*.Z|*.bz2|*.tar.rar|*.tar.7z|*.xz) EXT=zst;; 486 *.tgz|*.tbz2|*.tzst|*.tpz|*.txz) EXT=tar.zst;; 487 *) echo "Unsupported compression."; exit 255;; 488 esac 489 7z -so e ${i} | zstd --long --ultra -22 - -o ${i%.*}.${EXT} 490 done 491 492 + t t 493 i Compare (mcdiff) tagged files/directories 494 mcdiff %t 495 496 + ! t t 497 i Compare (mcdiff) opposite selected files 498 if [ "%d/%f" = "%D/%F" ]; then 499 echo "The two files must be different" 500 exit 1 501 fi 502 mcdiff %d/%f %D/%F 503 + ! t t 504 s Calculate SHA256 checksum of the current file 505 sha256sum %f 506 507 + t t 508 s Calculate SHA256 checksum of on the tagged files 509 for i in %t ; do 510 sha256sum "$i" 511 done 512 513 + ! t t 514 515 S Calculate SHA512 checksum of the current file 516 sha512sum %f 517 518 + t t 519 S Calculate SHA512 checksum of on the tagged files 520 for i in %t ; do 521 sha512sum "$i" 522 done 523 524 + ! t t 525 v Rename objects in current direcroty using vidir 526 VISUAL=mcedit vidir %d 527 528 + t t 529 v Rename tagged file/directories using vidir 530 VISUAL=mcedit vidir %t 531 532 h Fetch git remote changes 533 echo -n "Choose remote to fetch (empty for all) [$(git remote | tr '\n' ' ')]:" 534 read remote 535 [ "$remote"x = x ] && remote="--all" 536 git fetch ${remote} 537 538 H Fetch git remote changes (verbose) 539 echo "Available remotes:" 540 git remote 541 echo -n "Name of remote to fetch (empty for all): " 542 read remote 543 [ "$remote"x = x ] && remote="--all" 544 GIT_TRACE=2 git fetch --verbose ${remote} 545 546 g Show git log 547 git log --graph --abbrev-commit --date=relative --pretty=format:'%%Cred%%h%%Creset %%C(yellow)[%%an]%%Creset -%%C(cyan)%%d%%Creset %%s - %%Cgreen%%ch %%Cblue(%%cr)%%Creset' 548 549 G Show git log (include remotes) 550 git log --graph --abbrev-commit --date=relative --all --pretty=format:'%%Cred%h%Creset %%C(yellow)[%%an]%%Creset -%%C(cyan)%%d%%Creset %%s - %%Cgreen%%ch %%Cblue(%%cr)%%Creset' 551 552 n Run NCurses Disk Usage (ncdu -x) 553 ncdu -x 554 555 + f \.ncdu$ & t r & ! t t 556 N View NCurses Disk Usage (ncdu) file 557 ncdu -f %f 558 559 y Tail log file 560 tail -f %f 561 562 Y Tail (follow) log file 563 tail -F %f 564 377 565 + x /usr/bin/open | x /usr/local/bin/open & x /bin/sh 378 566 o Open next a free console 379 567 open -s -- sh 568