Tengo una carpeta principal llamada "parent_folder" con muchas subcarpetas, en estas subcarpetas hay un archivo llamado "foo.mp4".
Puedo encontrar estos archivos fácilmente haciendo esto:
mymacbook:parent_folder username$ find ./ -name "foo.mp4" -exec echo {} \;
Ahora que devuelve la ruta de cada archivo, en relación con parent_folder /
./path/to/foo.mp4
¿Cómo puedo devolver solo la ruta, sin el nombre del archivo?

-printf%hdirectorios principales del nombre del archivo (todos menos el último elemento). Si el nombre del archivo no contiene barras (ya que está en el directorio actual), el especificador% h se expande a "." .find ./ -name "foo.mp4" -printf "%h\n"imprimirá la ruta para cada archivo encontrado (uno por línea). Más de lo habitual, nadie lo usa,-exec echo {}por lo tanto, hay-print(omisión incluso omitida) oprintfacción.-printfes solo GNU. El OP menciona OS / X (un sistema BSD).Respuestas:
Con
GNUencontrar:Con otros
finds, los nombres de directorio proporcionados no contienen caracteres de nueva línea:O:
aunque eso significa ejecutar un
dirnamecomando por archivo.Si necesita ejecutar un comando sobre eso
path, puede hacer (sintaxis estándar):Aunque en este caso, puede usar
-execdir(una extensión BSD también disponible en GNUfind), quechdir()está en el directorio del archivo:Sin embargo,
findtenga en cuenta que si bien la implementación de GNU se expandirá{}hasta./filenameaquí, las de BSD tambiénfilename. Está bien aquí, ya que el nombre de archivo se pasa como argumento a una opción y siempre es de todosfeatured.mp4modos, pero para otros usos, es posible que tenga que tener en cuenta que el nombre del archivo puede comenzar con-o+(y el comando lo puede entender como una opción) o contener=(y debe entenderse como una asignación variable por awk por ejemplo), u otros caracteres que causan este tipo de problema conperl -p/n(no todos ellos arreglados porfindel./prefijo de GNU en ese caso), etc., que puede tener que tener en cuenta .fuente
find ., como dirname tendrás. en lugar de todo el camino.find ./ -name "featured.mp4" -exec ffmpeg -i "{}" -c:v libvpx -b:v 1M -c:a libvorbis [NEED DIRECTORY HERE] featured.webm \;Estoy usando la segunda sugerencia que mencionaste.El siguiente comando también se puede utilizar para obtener solo los detalles del directorio.
fuente