M Makefile => Makefile +2 -0
@@ 19,6 19,7 @@ install: clean
install -m755 src/rmtar $(BIN_DIR)/rmtar
install -m755 src/rmzip $(BIN_DIR)/rmzip
install -m755 src/tarcat $(BIN_DIR)/tarcat
+ install -m755 src/tarls $(BIN_DIR)/tarls
install -m755 src/unittest $(BIN_DIR)/unittest
install -m755 src/untar $(BIN_DIR)/untar
install -m755 src/whichcat $(BIN_DIR)/whichcat
@@ 45,6 46,7 @@ uninstall:
rm $(BIN_DIR)/rmtar
rm $(BIN_DIR)/rmzip
rm $(BIN_DIR)/tarcat
+ rm $(BIN_DIR)/tarls
rm $(BIN_DIR)/unittest
rm $(BIN_DIR)/untar
rm $(BIN_DIR)/whichcat
M README.md => README.md +1 -0
@@ 21,6 21,7 @@ rmtar |Delete 'tar' archive files
rmzip |Delete 'zip' archive files
stop-at |Re-print until a pattern is matched
tarcat |Print contents of target archive file(s) |*
+tarls |Print listings of target archive file(s) |*
unittest |Wrapper around Python's `unittest` module |`python3`, GNU or New (AT&T) `awk`
untar |Wrapper around `tar` for easier decompression |*
whichcat |Print all lines from a program
M src/mktar => src/mktar +2 -2
@@ 1,7 1,7 @@
#!/bin/bash
name="mktar"
-version="1.0"
+version="1.1"
read -r -d '' help_message <<-EOF
Wrapper around 'tar' for easier compression
Usage: mktar FILES [..] [OPTIONS]
@@ 188,7 188,7 @@ elif [[ "$checksum" -eq 1 ]] && ! prompt_overwrite "$checksum_fn"; then
exit 1
fi
for target in "${positional[@]}";do
- if [[ ! -f "$target" ]]; then
+ if [[ ! -f "$target" ]] && [[ ! -d "$target" ]]; then
error_msg "No such file '${target}'"
fi
done
A src/tarls => src/tarls +105 -0
@@ 0,0 1,105 @@
+#!/bin/sh
+
+name="tarls"
+version="1.0"
+help_message=$(/usr/bin/cat <<-EOF
+ Wrapper around 'tar' for easier listing
+ Usage: tarls TARGET [..] [OPTIONS]
+ Options:
+ -h, --help print this message and exit
+ -q, --quiet suppress error messages
+ -v, --version print version number and exit
+EOF
+)
+
+. /usr/local/lib/myminiparse.sh
+
+# error if no directory names given
+if [ "$#" -eq 0 ]; then
+ (>&2 /usr/bin/printf "Usage: tarls TARGET [OPTIONS]\n")
+ exit 1
+elif [ "$#" -eq 1 ] && [ "$quiet" -eq 1 ]; then
+ exit 1
+fi
+
+# main routine
+code=0
+for target; do
+ if [ ! -f "$target" ]; then
+ if [ "$quiet" -eq 0 ]; then
+ (>&2 printf "%s: No such file '%s'\n" "$name" "$target")
+ fi
+ code=1
+ else
+ case "$target" in
+ *tar)
+ if ! /usr/bin/tar -tf "$target"; then
+ code=1
+ fi
+ ;;
+
+ *tar.gpg)
+ if ! /usr/bin/gpg -d "$target" | /usr/bin/tar -t; then
+ code=1
+ fi
+ ;;
+
+ *tar.gz)
+ if ! /usr/bin/tar -tzf "$target"; then
+ code=1
+ fi
+ ;;
+
+ *tar.gz.gpg)
+ if ! /usr/bin/gpg -d "$target" | /usr/bin/tar -tz; then
+ code=1
+ fi
+ ;;
+
+ *tar.xz)
+ if ! /usr/bin/tar -tJf "$target"; then
+ code=1
+ fi
+ ;;
+
+ *tar.xz.gpg)
+ if ! /usr/bin/gpg -d "$target" | /usr/bin/tar -tJ; then
+ code=1
+ fi
+ ;;
+
+ *tar.zst)
+ if ! /usr/bin/tar --zstd -tf "$target"; then
+ code=1
+ fi
+ ;;
+
+ *tar.zst.gpg)
+ if ! /usr/bin/gpg -d "$target" | /usr/bin/tar --zstd -t; then
+ code=1
+ fi
+ ;;
+
+ *tar.bz2)
+ if ! /usr/bin/tar -tjf "$target"; then
+ code=1
+ fi
+ ;;
+
+ *tar.bz2.gpg)
+ if ! /usr/bin/gpg -d "$target" | /usr/bin/tar -tj; then
+ code=1
+ fi
+ ;;
+
+ *)
+ if ! /usr/bin/tar -tf "$target"; then
+ code=1
+ fi
+ ;;
+ esac
+ fi
+done
+
+exit "$code"
+