Diretório como argumento de linha de comando

0

Do meu código abaixo, eu devo procurar por arquivos de tamanho zero e solicitar ao usuário que os exclua, se assim desejar. No entanto, estou perdido, pois o script deve permitir que os diretórios sejam especificados como parâmetros de linha de comando. Eu devo usar o diretório atual como padrão, se nenhum diretório for especificado na linha de comando. Eu acho que estou no caminho certo, mas não consigo descobrir como solicitar ao usuário para inserir o caminho para o arquivo que ele deseja excluir.

#!/bin/bash

ls -lR | grep '^-' | sort -k 5 -rn

echo "Files of size zero, relative to current directory, are as follows:"
find . -size 0 -print

echo "Would you like to delete the files of size zero?: Type yes or no"
read answer

if [[ $answer == "yes" ]]
then
    find . -type f -empty -delete
    echo "List of files with size zero files deleted:"
    ls -lR | grep '^-' | sort -k 5 -rn

else
    echo "User wishes to not delete files"
fi
    
por traplord 02.07.2018 / 22:26

1 resposta

3

Você usaria

topdir=${1:-.}

Isso definiria a variável topdir como o primeiro argumento de linha de comando, a menos que estivesse ausente ou vazio, caso em que seria definido como . . Você usaria "$topdir" em seus comandos. Lembre-se de citar duas vezes.

Você não solicitaria ao usuário os caminhos para os arquivos serem excluídos, você já está usando find para isso:

find "$topdir" -type f -empty -delete

Se você quisesse um prompt para cada arquivo, usaria

find "$topdir" -type f -empty -ok rm {} ';'

Comentários de estilo:

  • Geralmente, um alerta de saída é enviado ao usuário com erro padrão:

    echo "Would you like to delete the files of size zero?: Type yes or no" >&2
    read answer
    

    ou

    read -p "Delete files (yes/no): " answer
    
  • Você mistura -size 0 e -empty em suas duas invocações find .

por 02.07.2018 / 22:31