#!/bin/sh
junkdir="$HOME/.junk"
do_list=0
do_purge=0
while getopts 'lp' opt; do
case "$opt" in
l) do_list=1 ;;
p) do_purge=1 ;;
*)
printf 'Usage: %s [-l|-p] [ name ... ]\n' "$0" >&2
exit 1 ;;
esac
done
shift "$(( OPTIND - 1 ))"
if [ ! -d "$junkdir" ] && [ "$do_purge" -eq 0 ]; then
printf '%s: Missing junk directory "%s"\n' "$0" "$junkdir" >&2
printf '%s: Re-run with -p to create it\n' "$0"
exit 1
fi
if [ "$do_list" -ne 0 ]; then
printf 'Current junk in "%s":\n' "$junkdir"
ls -l "$junkdir"
fi
if [ "$do_purge" -ne 0 ]; then
printf 'Emptying junk directory "%s"\n' "$junkdir"
rm -rf "$junkdir"
mkdir "$junkdir"
fi
if [ "$#" -eq 0 ]; then
exit
fi
echo 'Junking the following things:'
printf '%s\n' "$@"
mv "$@" "$junkdir"
Este script implementa o que você está tentando fazer. Ele usa getopts
para analisar os sinalizadores de linha de comando -l
e / ou -p
.
Estou definindo do_list
e do_purge
no loop while que analisa a opção de linha de comando porque desejo controlar a ordem na qual o ls
e o rm
ocorrem mais abaixo. Se um usuário usar -lp
ou -pl
, eu quero que eles vejam o conteúdo do diretório de lixo eletrônico antes de ser removido.
A remoção do diretório de lixo eletrônico com -p
também o recria. Eu faço isso com rm -rf
seguido de mkdir
para simplificar.
Após o loop de análise da linha de comando, eu ajustei os parâmetros posicionais para que eles contenham apenas argumentos não-opcionais (nomes de arquivos e / ou diretórios).
Se não houver argumentos posicionais ( $#
é zero), não tento executar mv
para mover arquivos para o diretório de lixo eletrônico.