Como listar o caminho completo dos arquivos / diretórios usando apenas o comando ls (trabalhando em um shell restrito)

0

Eu restrinjai o shell nos servidores do ambiente de produção em minha empresa, deixando-me com algumas opções de comando.

Estou tentando obter o caminho completo dos arquivos / diretórios usando apenas o comando ls . Eu não posso usar xargs, sed, awk, encontrar no shell restrito, então só tenho mais opções usando o comando ls.

Eu tentei abaixo do comando, mas isso não recurse. Eu menciono isso quando me deparei com esse comando enquanto procurava uma resposta para o meu problema.

ls -lRt -d -1 $PWD/{*,.*}

Aqui está a lista de TODOS os comandos disponíveis para mim no shell restrito. Deixe-me ser claro. Não consigo criar nenhuma função , não posso usar o comando read .

/usr/bin/cat
/usr/bin/clear
/usr/bin/cmp
/usr/bin/cut
/usr/bin/date
/usr/bin/df
/usr/bin/diff
/usr/bin/du
/usr/bin/grep
/usr/bin/head
/usr/bin/id
/usr/bin/ls
/usr/bin/od
/usr/bin/prstat
/usr/bin/ps
/usr/bin/sort
/usr/bin/tail
/usr/bin/wc
/usr/bin/which
/usr/bin/who
cd
echo
exit
pwd
    
por user3112966 20.10.2018 / 05:52

3 respostas

0

A função a seguir listará todos os arquivos de um diretório ( / por padrão) em ordem de profundidade sem usar ls :

lsr(){
        for f in "$1/"* "$1/".[!.]* "$1/"..?*; do
                test -e "$f" && echo "$f"
                test -d "$f" && lsr "$f"
        done
}

Exemplo:

$ lsr .
./dir
./dir/file
./dir/.dotfile
./.foo
./..bar
$ find . -depth
./dir/.dotfile
./dir/file
./dir
./.foo
./..bar
.

Pode ser feito em um script separado, em vez de em uma função:

#! /bin/sh
for f in "$1/"* "$1/".[!.]* "$1/"..?*; do
        test -e "$f" && echo "$f"
        test -d "$f" && "$0" "$f"
done
    
por 20.10.2018 / 11:55
0

Este comando deve fazer isso porque o eco está disponível.

ls -Rr1 . |  while read line; do case $line in *:) basepath=${line%:};; "") basepath=;; *) echo "$basepath/$line";; esac; done
    
por 21.10.2018 / 17:53
0

Não é possível dizer qual subconjunto de bash está implementado em rbash . Se você tiver sorte, tente

shopt -s globstar ## bash built in 
ls **/* *

( * lista os arquivos no diretório atual e **/* lista todos os arquivos em todos os subdiretórios, em qualquer profundidade).

    
por 22.10.2018 / 22:32