Browse Source

[nb] Edit: cli_commands.md

master
rdrew 3 weeks ago
parent
commit
70cbcc19b8
  1. 134
      cli_commands.md

134
cli_commands.md

@ -6,6 +6,9 @@
- [Text Processing](#text-processing) - [Text Processing](#text-processing)
- [Torrents](#torrents) - [Torrents](#torrents)
- [PDF Tools](#pdf-tools) - [PDF Tools](#pdf-tools)
- [PDF Sheet Music](#pdf-sheet-music)
- [Audiobooks](#audiobooks)
- [Large File Transfer (rclone)](#large-file-transfer-rclone)
--- ---
@ -15,17 +18,21 @@
### List content types with node counts ### List content types with node counts
```bash
drush sqlq 'select count(node.nid) as node_count, node_type.type drush sqlq 'select count(node.nid) as node_count, node_type.type
from node from node
inner join node_type on node.type = node_type.type inner join node_type on node.type = node_type.type
group by node_type.type' group by node_type.type'
```
### Filter results by keyword (e.g. "2014") ### Filter results by keyword (e.g. "2014")
```bash
drush sqlq 'select count(node.nid) as node_count, node_type.type drush sqlq 'select count(node.nid) as node_count, node_type.type
from node from node
inner join node_type on node.type = node_type.type inner join node_type on node.type = node_type.type
group by node_type.type' | grep 2014 group by node_type.type' | grep 2014
```
--- ---
@ -33,25 +40,31 @@
### Find and replace inside files (perl) ### Find and replace inside files (perl)
```bash
# Single file type in current directory # Single file type in current directory
perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt
# Recursively across all file types # Recursively across all file types
perl -pi -w -e 's/thex/robertsonlibrary/g;' **/*.* perl -pi -w -e 's/thex/robertsonlibrary/g;' **/*.*
```
### Find and replace in file names ### Find and replace in file names
```bash
# Rename files matching a pattern, verbose output shows what changed # Rename files matching a pattern, verbose output shows what changed
rename 's/livero/lives/g' **/*.* -v rename 's/livero/lives/g' **/*.* -v
```
## <<<<<<< HEAD ---
## Torrents ## Torrents
### Download via magnet link (aria2c) ### Download via magnet link (aria2c)
```bash
# aria2c is a lightweight multi-protocol download utility # aria2c is a lightweight multi-protocol download utility
aria2c -d ~/Downloads "magnetlink" aria2c -d ~/Downloads "magnetlink"
```
--- ---
@ -59,6 +72,7 @@
### OCR a PDF (ocrmypdf) ### OCR a PDF (ocrmypdf)
```bash
# Standard: optimize output, skip pages that already have a text layer # Standard: optimize output, skip pages that already have a text layer
ocrmypdf --optimize 3 --skip-text input.pdf output.pdf ocrmypdf --optimize 3 --skip-text input.pdf output.pdf
@ -66,9 +80,11 @@
# set DPI manually, use page segmentation mode 1 (automatic with OSD) # set DPI manually, use page segmentation mode 1 (automatic with OSD)
ocrmypdf --optimize 3 --image-dpi 300 --output-type pdf \ ocrmypdf --optimize 3 --image-dpi 300 --output-type pdf \
--force-ocr --tesseract-pagesegmode 1 input.pdf output.pdf --force-ocr --tesseract-pagesegmode 1 input.pdf output.pdf
```
### Downsample a PDF to 72dpi (Ghostscript) ### Downsample a PDF to 72dpi (Ghostscript)
```bash
# Single file # Single file
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/screen \ -dPDFSETTINGS=/screen \
@ -84,9 +100,11 @@
-sOutputFile="downsampled/$f" \ -sOutputFile="downsampled/$f" \
"$f" "$f"
done done
```
### Check image DPI in PDFs (pdfimages) ### Check image DPI in PDFs (pdfimages)
```bash
# Print image info to terminal # Print image info to terminal
for f in *.pdf *.PDF; do for f in *.pdf *.PDF; do
echo "=== $f ===" echo "=== $f ==="
@ -94,27 +112,68 @@
echo "" echo ""
done done
# Save output to images_list.txt instead # Save output to images_list.txt instead (appends; delete the file first to start fresh)
for f in *.pdf *.PDF; do for f in *.pdf *.PDF; do
[ -f "$f" ] || continue [ -f "$f" ] || continue
echo "=== $f ===" >> images_list.txt echo "=== $f ===" >> images_list.txt
pdfimages -list "$f" >> images_list.txt pdfimages -list "$f" >> images_list.txt
echo "" >> images_list.txt echo "" >> images_list.txt
done done
```
### Scan for CCITT encoding ### Scan for CCITT encoding
# CCITT is a fax-era compression format - flags PDFs that may cause compatibility issues CCITT is a fax-era compression format - this flags PDFs that may cause compatibility issues.
```bash
for f in *.pdf *.PDF; do for f in *.pdf *.PDF; do
[ -f "$f" ] || continue [ -f "$f" ] || continue
if pdfimages -list "$f" 2>/dev/null | grep -q " ccitt "; then if pdfimages -list "$f" 2>/dev/null | grep -q " ccitt "; then
echo "$f uses CCITT" echo "$f uses CCITT"
fi fi
done done
```
---
## PDF Sheet Music
### Check page size
```bash
pdfinfo filename.pdf
```
### Resize to letter
```bash
gs -sDEVICE=pdfwrite \
-sPAPERSIZE=letter \
-dFIXEDMEDIA \
-dPDFFitPage \
-dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
```
### Batch resize to letter
```bash
mkdir -p resized_music
for f in *.pdf; do
gs -sDEVICE=pdfwrite -sPAPERSIZE=letter -dFIXEDMEDIA -dPDFFitPage \
-dNOPAUSE -dBATCH -sOutputFile="resized_music/$f" "$f"
done
```
---
## Audiobooks
### Audiobook commands ### Split an m4b into MP3 chapters (m4b-tool via Docker)
# cd to desired dir, create 'input' dir and put m4b file in it and run command `cd` to the desired directory, create an `input` dir, put the m4b file in it, then run:
```bash
docker run --rm -it \ docker run --rm -it \
-v "$(pwd)":/data \ -v "$(pwd)":/data \
sandreas/m4b-tool \ sandreas/m4b-tool \
@ -122,42 +181,28 @@
--audio-format mp3 \ --audio-format mp3 \
--audio-bitrate 128k \ --audio-bitrate 128k \
--audio-channels 1 \ --audio-channels 1 \
--output-dir "/data/split" --output-dir "/data/split" \
-vv -vv
``` ```
ffmpeg -i Chaos.m4b -map 0:a -f segment -segment_times $(ffprobe -i Chaos.m4b -show_chapters -loglevel error | grep end_time | cut -d= -f2 | tr '\n' ',' | sed 's/,$//') -c:a libmp3lame -q:a 2 chapter_%03d.mp3
```
# check current dpi
for f in _.pdf_.PDF; do ### Split an m4b by chapter (ffmpeg)
echo "=== Images in: $f ==="
pdfimages -list "$f"
echo ""
done
# Creates (or overwrites) images_list.txt in the current directory Reads chapter end times with ffprobe and writes `chapter_000.mp3`, `chapter_001.mp3`, etc.
for f in _.pdf_.PDF; do ```bash
if [ -f "$f" ]; then ffmpeg -i Chaos.m4b -map 0:a -f segment \
echo "=== Images in: $f ===" >> images_list.txt -segment_times $(ffprobe -i Chaos.m4b -show_chapters -loglevel error \
pdfimages -list "$f" >> images_list.txt | grep end_time | cut -d= -f2 | tr '\n' ',' | sed 's/,$//') \
echo "" >> images_list.txt -c:a libmp3lame -q:a 2 chapter_%03d.mp3
fi ```
done
# scan for ccitt encoding ---
for f in _.pdf_.PDF; do ## Large File Transfer (rclone)
[ -f "$f" ] || continue
if pdfimages -list "$f" 2>/dev/null | grep -q " ccitt "; then
echo "$f uses CCITT"
fi
done
# Large file transfer to gdrive ### Copy to Google Drive
```bash
rclone copy file_location file_destination \ rclone copy file_location file_destination \
--progress \ --progress \
--transfers 4 \ --transfers 4 \
@ -167,27 +212,4 @@ rclone copy file_location file_destination \
--drive-chunk-size 64M \ --drive-chunk-size 64M \
--log-file rclone.log \ --log-file rclone.log \
--log-level INFO --log-level INFO
```
# PDF sheetmusic commands
## check size
`pdfinfo filename.pdf`
## resize to letter
`gs -sDEVICE=pdfwrite \
-sPAPERSIZE=letter \
-dFIXEDMEDIA \
-dPDFFitPage \
-dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf`
## batch resize to letter
`mkdir -p resized_music
for f in *.pdf; do
gs -sDEVICE=pdfwrite -sPAPERSIZE=letter -dFIXEDMEDIA -dPDFFitPage -dNOPAUSE -dBATCH -sOutputFile="resized_music/$f" "$f"
done`
> > > > > > > f99d1ed ([nb] Edit: cli_commands.md)

Loading…
Cancel
Save