Me gustaría usar findpara enumerar todos los archivos y directorios de forma recursiva en una raíz determinada para una cpiooperació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 cutpara 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)cutcomando es más limpio que el que usé; Me gusta. (Lasedsolución también es buena, pero la repeticióndiskimg/es un poco desafortunada).cdprimero 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
findsoporteprintf.findcompatible-printf, mientras que muchos BSDfindhan copiado algunas de las características de GNUfind, ninguno ha copiado-printftodavía (AFAIK).%Pde la ruta relativa era lo que necesitaba.Usa la
realpathutilidad:fuente
--relative-to.