Hasta ahora se me ocurrió esto.
if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
echo 1
else
echo 0
fi
Pero lo que me gustaría hacer es copiar el directorio principal del archivo encontrado a otra ubicación.
Tengo la sensación de que debería utilizar el comando de búsqueda.
Respuesta1
La respuesta de fede.evol falla si las rutas contienen espacios en blanco. La salida de find
ols
no debe usarse en una sustitución de comando.
La forma correcta de tratar con todos los nombres de archivos (excepto las rutas con nuevas líneas) sería:
find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done
De esta manera, cada carpeta /somewhere
se copia a /other/
. Tenga en cuenta que la barra diagonal final es obligatoria porque, de lo contrario, el destino siempre se sobrescribirá.
Respuesta2
Úselo dirname FILE
para obtener el nombre del directorio de un archivo determinado. Así por ejemplo:
find DIRECTORY -name "*.mkv" -exec dirname {} \;
Le dará todos los directorios con un MKV en DIRECTORIO. Luego puede pasarlos uniq
para no obtener dobles y luego, en caso de copiarlos.
Por ejemplo
cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR