Tengo una carpeta llamada 'muestra' y tiene 3 archivos. Quiero escribir un script de shell que leerá estos archivos dentro de la carpeta de muestra y lo publicará en un sitio HTTP usando curl.
He escrito lo siguiente para enumerar los archivos dentro de la carpeta:
for dir in sample/*; do
echo $dir;
done
Pero me da el siguiente resultado:
sample/log
sample/clk
sample/demo
Se adjunta la carpeta principal en el mismo. Quiero el resultado de la siguiente manera (sin el nombre de la carpeta principal)
log
clk
demo
¿Cómo hago esto?
shell-script
files
directory
for
Raji
fuente
fuente
echo ${dir##*/}
para despegar el camino.Respuestas:
Use
basename
para quitar la ruta principal de los archivos:Aunque por qué no:
fuente
Suponiendo que su shell lo admita, podría usar la expansión de parámetros
o simplemente podría cambiar a ese directorio y hacer la lista allí
fuente
--
no es necesario aquí. El primer argumento es una cadena fija sin guiones.${parameter##pattern}
es compatible con todos los shells POSIX.Debido a que los sistemas * nix permiten que casi cualquier carácter forme parte de un nombre de archivo (incluidos espacios en blanco, líneas nuevas, comas, símbolos de barra, etc.), nunca debe analizar la salida del comando "ls" en un script de shell. No es confiable Vea Por qué no debería analizar la salida de ls .
Use "buscar" para crear una lista de archivos. Si está utilizando Bash, puede insertar la salida de "buscar" en una matriz. Ejemplo a continuación, con la advertencia de que usé un comando "curl" que no funciona.
fuente
Depende de lo que quieras hacer con los directorios.
Para simplemente imprimir el nombre, sin verificar si es un directorio, puede usar ls:
Mejor sería encontrar, porque puedes usar filtros:
Si desea ejecutar comandos en los archivos, debe usar find y no un bucle for:
fuente