Я предполагаю, что вы используете vi.
Вы можете быстро перемещаться по сценарию Linux из vi, используя клавиши перехода по страницам вверх и вниз на клавиатуре.
Вы также можете перейти к началу или концу скрипта, используя 1G
и G
в vi.
find
+awk
solución:
find /net/*/scenes -maxdepth 1 -type f -name "*.mb" \
| awk -F'/' '{ fn = $NF; $NF = "" }!a[$0]++{ print $0 fn }' OFS='/'
-F'/'
yOFS='/'
-representan el separador de campo de entrada y salida fn = $NF
-almacenar el último valor de campo (, es decir, un nombre de archivo )en la variablefn
!a[$0]++{ print $0 fn }
-en la primera aparición de la ruta de directorio única (presentada por$0
)imprima la línea (la ruta de archivo completa)O usando canalización GNU coreutils
:
find /net/*/scenes -maxdepth 1 -type f -name "*.mb" -printf "%H %p\n" \
| sort -k1,1 -u | cut -d' ' -f2
Su nueva edición especifica que está usandotcsh
-Originalmente supuse que estaba usando bash
. Puede llamar a find
desde dentro de una invocación find -exec
y canalizar cada invocación interna find
a head
para extraer el primer resultado, p.
find /net/* -maxdepth 1 -exec tcsh -c "find {} -maxdepth 1 -type f -name '*.mb' -size +200M | head -1" \;
He aquí un pequeño ejemplo de demostración:
# Create the directory structure
mkdir -p test/abc/scenes
mkdir -p test/def/scenes
# Create example data files
dd if=/dev/zero of=abc/scenes/file1.mb bs=201M count=1
dd if=/dev/zero of=abc/scenes/file2.mb bs=201M count=1
dd if=/dev/zero of=def/scenes/file3.mb bs=201M count=1
dd if=/dev/zero of=def/scenes/file4.mb bs=201M count=1
# Execute the find command
find./* -maxdepth 1 -exec tcsh -c "find {} -maxdepth 1 -type f -name '*.mb' -size +200M | head -1" \;
Esto produce el siguiente resultado:
./abc/scenes/file1.mb
./def/scenes/file3.mb
Originalmente, la pregunta no especificaba tcsh
. En bash
, puede llamar a find
desde un bucle y canalizar cada invocación find
a head
para extraer el primer resultado, p.
for directory in /net/*/scenes; do
find "${directory}" -maxdepth 1 -type f -name '*.mb' -size +200M | head -1;
done
He aquí un pequeño ejemplo de demostración:
# Create the directory structure
mkdir -p test/abc/scenes
mkdir -p test/def/scenes
# Create example data files
dd if=/dev/zero of=abc/scenes/file1.mb bs=201M count=1
dd if=/dev/zero of=abc/scenes/file2.mb bs=201M count=1
dd if=/dev/zero of=def/scenes/file3.mb bs=201M count=1
dd if=/dev/zero of=def/scenes/file4.mb bs=201M count=1
# Execute the find command
for directory in./*/scenes; do
find "${directory}" -maxdepth 1 -type f -name '*.mb' -size +200M | head -1;
done
Esto produce el siguiente resultado:
./abc/scenes/file1.mb
./def/scenes/file3.mb
Usando 2 comandos de búsqueda primero para encontrar directorios, luego para buscar en cada uno de ellos:
while read dir; do find "$dir" -name "*.mb" -maxdepth 1 | head -1 ; done << EOF
$(find /net/*/scenes -type d)
EOF