En Linux, tengo archivos que contienen, entre otros, muchos archivos y directorios que contienen el "desecho" literal. Puedo verlos escribiendo ls *scrap*
sin problema. Sin embargo, eso también devuelve directorios que contienen el "desecho" literal y me gustaría excluirlos.
Intenté jugar con ls | grep ".*scrap.*"
o ls | grep scrap
pero esto devuelve sólo los directorios (no los archivos normales).
¿Por qué esto es tan?
El siguiente paso será (una vez que el representante devuelva el resultado correcto) eliminar los directorios de ese resultado. ¡Las sugerencias sobre cómo hacerlo también son bienvenidas!
Respuesta1
En realidad, para eventualmente enumerar todos los archivos normales en el directorio actual (en el primer nivel) que tienen scrap
sus nombres, no necesita ls
+ grep
.
Con el viejo bienfind
dominio:
find . -maxdepth 1 -type f -name "*scrap*" -ls
Respuesta2
Te encuentras con problemas ls
cuando grep
los nombres de archivos contienen espacios o (peor) nuevas líneas. Pero con nombres de archivos seguros puedes hacer esto:
ls -l | grep -oP '^-.* \K.*$'
ls -l | sed -n '/^-/s/^.* //p'
Pero normalmente deberías utilizar el find
enfoque.
Respuesta3
Para los nombres de los archivos que no son de directorio en el directorio actual que contienen scrap
, en zsh
:
print -rC1 -- *scrap*(ND^/)
Tenga en cuenta que en ls *scrap*
(o más correcto ls -- *scrap*
), si alguno de los *scrap*
archivos es del tipodirectorio, luego ls
enumerará suscontenido(con un that-scrap-dir:
encabezado a menos que *scrap*
se expanda a un solo archivo que sea ese directorio).
Si quieres eso para archivos de tipodirectorio, ls
simplemente imprime su nombre como para otros tipos de archivos, necesitarías agregar la -d
opción:
ls -d -- *scap*(D^/)
Pero casi no tiene sentido usarlo, ls
ya que todo el trabajo de buscar archivos por nombre y tipo lo ha realizado el shell en el momento en que ls
se invoca, también puede usar el incorporado print
o printf
de su shell.
Respuesta4
Pareceestees la respuesta que estás buscando. La publicación habla de que la expansión global es la razón por la que solo se muestran ciertas cosas.