Eu sou apenas iniciante em scripts de shell.
Ao executar o comando abaixo, estou obtendo a saída abaixo
$ cd demo
$ ls
dir1 dir2 dir3 dir4 dir5
$
$find . -mtime -2 -type f -regextype posix-egrep -regex ".*/(dir1|dir2|dir3|dir4|dir5)/.+" -exec ls {} \; > /tmp/basefileslist
./dir1/demo1.sh
./dir2/demo2.sh
./dir3/demo3.sh
./dir4/demo4.sh
./dir5/demo5.sh
Eu deveria obter saída sem ./
- eu quero como abaixo
dir1/demo1.sh
dir2/demo2.sh
dir3/demo3.sh
dir4/demo4.sh
dir5/demo5.sh
Você pode modificar o
find
comando para remover o./
prefixo da saída usando o predicado específico do GNU (mas também-regextype
é específico do GNU)-printf
em vez de-exec
. Aqui está um exemplo de comando que deve fornecer a saída desejada:Neste comando, o
-printf '%P\n'
predicado é usado para imprimir o caminho relativo de cada arquivo encontrado porfind
, sem o./
prefixo inicial. O%P
especificador de formato especifica o caminho relativo (relativo ao diretório que você disse para começar, aqui.
) e\n
especifica que cada caminho deve ser impresso em uma nova linha.Depois de executar este comando, a saída deve ser semelhante à seguinte:
A
./
saída do in find vem do.
argumento antes das opções. Alterar o.
argumento altera a parte da saída em que você está focado. Dado o seu exemplo, isso produziria a saída que você está pedindo:Excluí as opções de regex porque imaginei que elas duplicam a ação de especificar os argumentos do subdiretório. A saída é:
Em seu caso de teste específico (com apenas cinco subdiretórios correspondentes), você pode reduzir a lista de subdiretórios a um simples shell glob:
Ou um glob ainda mais curto:
Existem muitos casos de uso em que usar
find dir1 dir2 dir3 dir4 dir5
oufind dir?
não encontrará os arquivos desejados como este. Mas o objetivo da minha resposta foi mostrar como os argumentos antes das opções afetarão os caminhos na saída do find.