Como eu mudo o método de ordenação dos arquivos usados pelo asterisco (*) no bash?

1

Estou tentando executar um comando em todos os arquivos em um diretório que começa com o arquivo que possui a data de modificação mais antiga e termina com o arquivo com a data mais recente.

Acho que o asterisco ( * ) é útil para executar um comando em todos os arquivos em um diretório, desta forma:

$ stat -x *

mas que classifica os arquivos em ordem alfabética, existe alguma maneira de obter a mesma função, mas começando com o arquivo com a data de modificação mais antiga?

EDIT: quero dizer "mais cedo" no sentido humano, o arquivo mais antigo.

    
por DisplayName 07.05.2018 / 18:09

2 respostas

2

Assumindo as ferramentas GNU, você terá que fazer algo como

find . -maxdepth 1 -name '*ASD*' -printf '%T@\t%p
files_by_mtime () { 
    local pattern=$1
    local -n arr=$2
    arr=()
    while IFS=$'\t' read -rd '' mtime name; do
        arr+=("$name")
    done < <(
        find . -maxdepth 1 -name "$pattern" -printf '%T@\t%p
find . -maxdepth 1 -name '*ASD*' -printf '%T@\t%p
files_by_mtime () { 
    local pattern=$1
    local -n arr=$2
    arr=()
    while IFS=$'\t' read -rd '' mtime name; do
        arr+=("$name")
    done < <(
        find . -maxdepth 1 -name "$pattern" -printf '%T@\t%p%pre%' | sort -z -k1.1n
    )
}

files_by_mtime '*' myarr
for file in "${myarr[@]}"; do
    # do something with the filename
    echo ">>>$file"
done
' | sort -z -k1.1n | while IFS=$'\t' read -rd '' mtime name; do # do something with the filename echo ">>>$name" done
' | sort -z -k1.1n ) } files_by_mtime '*' myarr for file in "${myarr[@]}"; do # do something with the filename echo ">>>$file" done
' | sort -z -k1.1n | while IFS=$'\t' read -rd '' mtime name; do # do something with the filename echo ">>>$name" done

Os aros extras são para manipular qualquer nome de arquivo concebível, como aqueles que contêm caracteres de nova linha.

Para encapsular isso em uma função, eu escreveria:

%pre%

Necessário bash verson 4.3 +

    
por 07.05.2018 / 19:05
0

ls -tr classificará os arquivos no diretório atual pelo tempo de modulação mais antigo.

    
por 07.05.2018 / 18:14