si encuentra ext, entonces cp directorio principal; de lo contrario, no se encuentra el eco

si encuentra ext, entonces cp directorio principal; de lo contrario, no se encuentra el eco

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 findols 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 /somewherese 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 FILEpara 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 uniqpara no obtener dobles y luego, en caso de copiarlos.

Por ejemplo

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

información relacionada