mirror of
https://github.com/sbrl/bin.git
synced 2018-01-10 21:33:46 +00:00
Add reflace & ignore ghostwriter backup files
This commit is contained in:
parent
fbf5ec0316
commit
668ee5a559
3 changed files with 175 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*.backup
|
|
@ -57,6 +57,7 @@ Here's a list of the most interesting ones, along with what they do and where th
|
|||
- ssh-retry - I forget where it came from, but this command reepeatedly calls ssh until it succeeds in connecting.
|
||||
- quote-get - Displays a random quote from a remote file. The quote stays the same until the following day. The remote file is cached locally for convenience :smiley_cat:
|
||||
- teleport / telepeek / telepick - A pair of quick functions in my `.bash_aliases` file for quickly jumping about. Works best if you've got a decent amount of free RAM for the cache.
|
||||
- [reflac](https://github.com/chungy/reflac) - Small flac recompression script
|
||||
|
||||
## cloudsurfer.sh
|
||||
`cloudsurfer.sh` is a new script I'm writing to bring some of the customisations I store here in this repository to terminals on shared machines - where I can't modify `.bashrc`, for example.
|
||||
|
|
173
reflac
Executable file
173
reflac
Executable file
|
@ -0,0 +1,173 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
VERSION=1.5
|
||||
|
||||
VERBOSE=0
|
||||
RECURSIVE=0
|
||||
NOACTION=0
|
||||
SYNC=1
|
||||
FLAC_LEVEL=5 # Default FLAC compression level
|
||||
PRESERVE_MODTIME="" # for -p|--preserve
|
||||
|
||||
SELF="$(readlink -f "$0")"
|
||||
OPTS=$(getopt -o Vvhrnps012345678 \
|
||||
-l version,verbose,help,recursive,preserve,no-action,no-sync,fast,best \
|
||||
-n reflac -- "$@")
|
||||
TMPDIR="$(mktemp --tmpdir -d reflac.XXXXXXXXXX)"
|
||||
|
||||
eval set -- "$OPTS"
|
||||
|
||||
trap "exit 1" INT
|
||||
|
||||
usage()
|
||||
{
|
||||
cat <<EOF
|
||||
‘reflac’ recompresses FLAC files while maintaining tags and file names.
|
||||
|
||||
Usage: reflac [OPTION]... [--] DIRECTORY...
|
||||
|
||||
-h --help Displays this help text
|
||||
-V --version Displays the version of this program
|
||||
-v --verbose Increases the verbosity. Use once to display the FLACs
|
||||
currently being processed, use twice for the full ‘flac’
|
||||
output.
|
||||
-r --recursive Recurse into directories.
|
||||
-n --no-action Do not recompress. With --verbose, displays a list of
|
||||
files that would be processed.
|
||||
-p --preserve Preserve file modification time.
|
||||
-s --no-sync Do not synchronize file data. Will return faster, with
|
||||
the potential danger to lose your files in a system crash.
|
||||
-0 --fast Use the fastest, but worst, compression possible.
|
||||
-1..-7 Adjust FLAC compresion between these standard ranges.
|
||||
The default is -5, the same as for flac itself.
|
||||
-8 --best Use the slowest, but best, compression possible.
|
||||
|
||||
DIRECTORY should point ‘reflac’ to somewhere that contains *.flac
|
||||
files. Optionally terminate the argument list with -- so that any
|
||||
possible directory names don’t get misinterpreted as arguments.
|
||||
EOF
|
||||
rmdir "$TMPDIR"
|
||||
exit 0
|
||||
}
|
||||
|
||||
recompress()
|
||||
{
|
||||
for flac in *.flac; do
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo " $flac"
|
||||
fi
|
||||
|
||||
if [ $NOACTION -eq 0 ]; then
|
||||
HAS_COVER_ART=1
|
||||
metaflac --no-utf8-convert \
|
||||
--export-tags-to="$TMPDIR/$(basename -s flac -- "$flac")tag" \
|
||||
-- "$flac"
|
||||
metaflac --export-picture-to="$TMPDIR/$(basename -s flac -- "$flac")img" \
|
||||
-- "$flac" > /dev/null 2>&1 || HAS_COVER_ART=0 #the error is handled later. do not exit the script
|
||||
if [ $VERBOSE -gt 1 ]; then
|
||||
flac --force-rf64-format --output-prefix="$TMPDIR/" -d -- "$flac"
|
||||
flac --delete-input-file -$FLAC_LEVEL -- \
|
||||
"$TMPDIR/$(basename -s flac -- "$flac")rf64"
|
||||
else
|
||||
flac -s --force-rf64-format --output-prefix="$TMPDIR/" -d -- "$flac"
|
||||
flac -s --delete-input-file -$FLAC_LEVEL -- \
|
||||
"$TMPDIR/$(basename -s flac -- "$flac")rf64"
|
||||
fi
|
||||
|
||||
if [ $HAS_COVER_ART -eq 1 ]; then
|
||||
metaflac --no-utf8-convert $PRESERVE_MODTIME \
|
||||
--import-tags-from="$TMPDIR/$(basename -s flac -- "$flac")tag" \
|
||||
--import-picture-from="$TMPDIR/$(basename -s flac -- "$flac")img" \
|
||||
-- "$TMPDIR/$flac"
|
||||
else
|
||||
metaflac --no-utf8-convert $PRESERVE_MODTIME \
|
||||
--import-tags-from="$TMPDIR/$(basename -s flac -- "$flac")tag" \
|
||||
-- "$TMPDIR/$flac"
|
||||
fi
|
||||
mv -f -- "$TMPDIR/$flac" "$flac.new"
|
||||
if [ $SYNC -eq 1 ]; then
|
||||
sync "$flac.new"
|
||||
mv -f "$flac.new" "$flac"
|
||||
sync "$flac"
|
||||
else
|
||||
mv -f "$flac.new" "$flac"
|
||||
fi
|
||||
rm -f -- "$TMPDIR/$(basename -s flac -- "$flac")tag" \
|
||||
"$TMPDIR/$(basename -s flac -- "$flac")img"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
while true ; do
|
||||
case "$1" in
|
||||
-v|--verbose)
|
||||
VERBOSE=$((VERBOSE+1))
|
||||
shift ;;
|
||||
-r|--recursive)
|
||||
RECURSIVE=1
|
||||
shift ;;
|
||||
-0|-1|-2|-3|-4|-5|-6|-7|-8)
|
||||
FLAC_LEVEL=${1#-}
|
||||
shift ;;
|
||||
--fast)
|
||||
FLAC_LEVEL=0
|
||||
shift ;;
|
||||
--best)
|
||||
FLAC_LEVEL=8
|
||||
shift ;;
|
||||
-n|--no-action)
|
||||
NOACTION=1
|
||||
shift ;;
|
||||
-p|--preserve)
|
||||
PRESERVE_MODTIME="--preserve-modtime"
|
||||
shift ;;
|
||||
-s|--no-sync)
|
||||
SYNC=0
|
||||
shift ;;
|
||||
-V|--version)
|
||||
echo "reflac version $VERSION"
|
||||
rmdir "$TMPDIR"
|
||||
exit 0 ;;
|
||||
-h|--help)
|
||||
usage ;;
|
||||
--) shift; break ;;
|
||||
*) echo "$0: This should never happen!" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$*" ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
if [ $VERBOSE -eq 0 ] && [ $NOACTION -eq 1 ]; then
|
||||
rmdir "$TMPDIR"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for dir do
|
||||
if [ $RECURSIVE -eq 1 ] && [ $NOACTION -eq 1 ]; then
|
||||
find "$(readlink -f -- "$dir")" -type d -execdir "$SELF" -nv {} \;
|
||||
elif [ $RECURSIVE -eq 1 ]; then
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
find "$(readlink -f -- "$dir")" -type d \
|
||||
-execdir "$SELF" -v -"$FLAC_LEVEL" {} \;
|
||||
elif [ $VERBOSE -ge 2 ]; then
|
||||
find "$(readlink -f -- "$dir")" -type d \
|
||||
-execdir "$SELF" -vv -"$FLAC_LEVEL" {} \;
|
||||
else
|
||||
find "$(readlink -f -- "$dir")" -type d \
|
||||
-execdir "$SELF" -"$FLAC_LEVEL" {} \;
|
||||
fi
|
||||
else
|
||||
pushd -- "$dir" >/dev/null
|
||||
if [ $VERBOSE -gt 0 ]; then readlink -f .; fi
|
||||
if [ ! -z "$(ls -- *.flac 2>/dev/null)" ]; then
|
||||
recompress
|
||||
fi
|
||||
popd >/dev/null
|
||||
fi
|
||||
done
|
||||
|
||||
rmdir "$TMPDIR"
|
Loading…
Reference in a new issue