Me gustaría usar find
para enumerar todos los archivos y directorios de forma recursiva en una raíz determinada para una cpio
operación. Sin embargo, no quiero que el directorio raíz aparezca en las rutas. Por ejemplo, actualmente obtengo:
$ find diskimg
diskimg
diskimg/file1
diskimg/dir1
diskimg/dir1/file2
Pero me gustaría obtener
file1
dir1
dir1/file2
(tenga en cuenta que la raíz tampoco está en mi salida deseada, pero es fácil deshacerse de ella tail
).
Estoy en OS X, y preferiría no instalar ninguna herramienta adicional (por ejemplo, GNU find) si es posible, ya que me gustaría compartir el script que estoy escribiendo con otros usuarios de OS X.
Sé que esto se puede hacer cut
para cortar la lista raíz, pero parece una solución subóptima. ¿Hay una mejor solución disponible?
find diskimg/* | cut -d '/' -f2-
Respuestas:
Si lo que intenta hacer no es demasiado complejo, puede lograr esto con sed:
O
cut
:fuente
find diskimg | grep -v '^diskimg$' | sed -e 's|^diskimg/||'
(tenga en cuenta que también agregué '-e', y una^
buena práctica (no es necesario aquí, ya que está seguro de que todas las líneas tendrán esto ... pero sigue siendo una buena práctica) , y guarda algo de CPU;))find diskimg | sed -e 's|^diskimg/*||'
(el '/ *' coincidirá con cualquier número de '/', incluso 0)cut
comando es más limpio que el que usé; Me gusta. (Lased
solución también es buena, pero la repeticióndiskimg/
es un poco desafortunada).cd
primero en el directorio:Al finalizar, volverá a su directorio raíz.
Sus archivos se antepondrán con ./ en este caso; la única forma en que veo alrededor sería usando
cut
:Use una subshell para evitar cambiar el directorio actual de su shell (esto no es necesario si está canalizando la salida ya que el lado izquierdo de una tubería ya se ejecuta en una subshell).
fuente
(cd diskimg && find . ; )
. De esta forma elcd diskimg && find .
se lleva a cabo en un subnivel: cuando ese subnivel salidas que están de vuelta a su propia concha, en cualquier directorio donde estábamos.find *
es otra manera alrededor del prefijo inútilOtro, más complejo pero que solo usa el enfoque de búsqueda de mi otra respuesta:
fuente
find
soporteprintf
.find
compatible-printf
, mientras que muchos BSDfind
han copiado algunas de las características de GNUfind
, ninguno ha copiado-printf
todavía (AFAIK).%P
de la ruta relativa era lo que necesitaba.Usa la
realpath
utilidad:fuente
--relative-to
.