Estoy ejecutando Mac OSX e intento usar la línea de comando para encontrar la cantidad de archivos que tengo con el mismo nombre.
Traté de usar el siguiente comando:
find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files
No funciona! Cuando hago lo siguiente:
find ~ -type f -name "*" -print > duplicate_files
Entonces duplicate_files contiene las rutas de todos mis archivos. Así que creo que el problema es con basename
: no acepta entradas estándar. Luego probé lo siguiente:
basename $(find ~ -type f -name "*" -print) > duplicate_files
pero de nuevo eso no parece funcionar. La búsqueda en Internet no parece producir mucha alegría. Cualquier pensamiento más bienvenido.
¿Por qué no utilizar las
find
funciones incorporadas para generar solo el nombre de archivo?(asume GNU
find
) o al menos algo como esto:basename
no puede leer a través de una tubería o procesar varios archivos a la vezPD. No es necesario especificar
-name '*'
si desea enumerar todos los archivos. Esta es una opción por defecto.fuente
basename: unknown primary or operator
. Gracias por el consejo-name "*"
-printf
incluso en la página de manual de posix. Sobre el error con la segunda forma, es causa de error tipográfico en mi respuesta. Fijo. ¿Podrías intentarlo una vez más?-printf
me sale el-printf: unknown primary or operator
. Además, cuando revisé el libro de referencia Unix in a Nutshell, aparece como una opción de GNU / Linux - no dice nada sobre OSXman find
en tu consola :)Esto parece funcionar para mí en OSX:
fuente
+
significa el comando?-a
opción de cubrir ese caso también.Alternativas (supone que no hay nueva línea en los nombres de archivo):
fuente
Puede usar
xargs
conbasename
para obtener la salida deseada, como esta:fuente
Con una versión reciente de
bash
que maneja matrices asociativas, lo siguiente también manejaría nombres de ruta con nuevas líneas incrustadas:Esto no utiliza ninguna utilidad externa.
fuente