1 votos

Listar todos los archivos en el dispositivo USB desde /Volumes Shell script

Para aclarar las cosas he configurado acciones de carpeta en mi mac para que cada vez que se conecte un dispositivo USB a mi mac se ejecute un shell script.

Cuando hago una lista de todos los archivos en el directorio /Volúmenes obtengo

$ ls -a
.       ..      .DS_Store   MobileBackups   Storage     WED

Lo que quiero hacer es listar todas las carpetas y archivos ubicados en WED o cualquier USB que aparezca, por lo que se excluyen los directorios

.       ..      .DS_Store   MobileBackups   Storage

Dejándome con

WED

Lo que tengo para el script hasta ahora es:

GLOBIGNORE='/Volumes/MobileBackups*':'/Volumes/Storage*'
find '/Volumes' >> /Users/Brett/dev/USBLOGS/LogUSB.txt

He intentado varias maneras diferentes, pero todavía termina la lista de todos los archivos en el directorio /Volumes.

Cualquier ayuda será muy apreciada. Gracias, Brett

Además, es MAC OS X El Capitan

3voto

user3439894 Puntos 5883

Ya que sólo quiere find para actuar sobre los dispositivos de bloque USB, el siguiente es un ejemplo de uso de la información reportada por System Profiler para obtener el punto de montaje de cualquier dispositivo de bloque USB conectado y montado. Al hacerlo de esta manera no importa qué otros puntos de montaje existen bajo /Volumes Tampoco importa cuál es el nombre del dispositivo de bloque USB, ya que se determina a partir de System Profiler y no del ls comando.

He modificado el código, una vez más, eliminando la línea de comando compuesta ya que no es probable que se ejecute de esa manera de todos modos y es más fácil de mantener en forma de script mientras que se añade la capacidad de manejar los espacios en el nombre de la etiqueta del dispositivo de bloque USB.

Cambiando temporalmente el separador de campo interno $IFS , añadiendo IFS=$'\n' al script ignorará el espacio(s) como separador en la salida de grep cuando se pasa a find . Para no ensuciar ningún código en el resto de su script, obtengo de un puño el estado de $IFS y luego lo descansamos.

En un bash script:

#!/bin/bash

_ifs="$IFS"
IFS=$'\n'
for p in $(system_profiler SPUSBDataType | grep -oE '/Volumes/.*$'); do
    if [ -n "$p" ]; then
        find "$p"/*
    fi
done >> filename.txt 
IFS="$_ifs"

El system_profiler SPUSBDataType emite información sobre el bus USB y la canaliza a través de grep para conseguir /Volumes/$whatever Por ejemplo /Volumes/USB Drive utilizando -oE para el '/Volumes/.*$' que produce /Volumes/ y todo lo que le sigue hasta el final de la línea, así '/Volumes/.*$' traducirá el nombre de ruta completo del punto de montaje de cualquier dispositivo de bloque USB montado. Así que cualquiera que sea el dispositivo de bloque USB montado, se asigna a $p (Elegí "p" para camino ) y cuando se utiliza con find He añadido el /* después de ella para que no salga el archivos de puntos . El if está ahí para evitar cualquier salida si no hay dispositivos de bloque USB montados.

1voto

Michael Zhou Puntos 167

Aquí hay una variación de la solución de user3439894 sin establecer el IFS o el bucle.

system_profiler SPUSBDataType | awk -F": " '/Mount Point/ {printf("%s%c", $2, 0)}' | xargs -0 -IX find X >outfile

Los datos se analizan a partir de system_profiler con awk . awk imprime los puntos de montaje terminados con el carácter nulo que luego se canaliza a xargs y los resultados se escriben en outfile .

¡Para excluir los archivos de puntos de la salida, añada la opción ! ¡-nombre (no nombre) y ! -path (no ruta) al comando find.

system_profiler SPUSBDataType                       |
awk -F": " '/Mount Point/ {printf("%s%c", $2, 0)}'  |
xargs -0 -IX find X ! -name '.*'  ! -path 'X/.*/*' 2>/dev/null >outfile

0voto

chazlarson Puntos 196

Mi /Volúmenes dir:

   /Volumes  ls
BOOTCAMP      Cool Stuff    Macintosh HD  Recovery HD

Este comando sólo muestra los archivos del disco duro de recuperación:

  /Volumes  find . -type d \( -name BOOTCAMP -o -name Cool\ Stuff \) -prune -o -print
.
./Macintosh HD
./Recovery HD
./Recovery HD/.fseventsd
./Recovery HD/.fseventsd/no_log
./Recovery HD/.metadata_never_index
./Recovery HD/.Trashes
find: ./Recovery HD/.Trashes: Permission denied
./Recovery HD/com.apple.boot.R
./Recovery HD/com.apple.boot.R/Library
...snip...

Puedes añadir más unidades a esa lista:

\( -name BOOTCAMP -o -name Cool\ Stuff -o -name Foo -o -name Bar -o -name Baz \)

Se encuentra aquí: http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X