Если вы действительно хотите застегнуть дерево каталогов, вы можете использовать инструмент zip
следующим образом:
$ zip -r archive.zip *
С образцом каталога я бы получил следующее в . zip
файл:
$ unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
--------- ---------- ----- ----
0 10-30-2013 15:26 1/
0 10-30-2013 15:26 1/afile
0 10-30-2013 15:26 2/
0 10-30-2013 15:26 2/afile
0 10-30-2013 15:26 3/
0 10-30-2013 15:26 3/afile
0 10-30-2013 15:26 4/
0 10-30-2013 15:26 4/afile
--------- -------
0 8 files
Если вы хотите выполнить вышеописанное, используя tar
и gzip
полученный .tar
файл после этого, вы можете использовать одну команду:
$ tar zcvf archive.tar.gz *
С примером каталога я бы получил следующее в файле .tar.gz
:
$ tar ztvf archive.tar.gz
drwxrwxr-x saml/saml 0 2013-10-30 15:26 1/
-rw-rw-r-- saml/saml 0 2013-10-30 15:26 1/afile
drwxrwxr-x saml/saml 0 2013-10-30 15:26 2/
-rw-rw-r-- saml/saml 0 2013-10-30 15:26 2/afile
drwxrwxr-x saml/saml 0 2013-10-30 15:26 3/
-rw-rw-r-- saml/saml 0 2013-10-30 15:26 3/afile
drwxrwxr-x saml/saml 0 2013-10-30 15:26 4/
-rw-rw-r-- saml/saml 0 2013-10-30 15:26 4/afile
Si desea la cantidad de líneas en un archivo, que será igual a la cantidad de filas devueltas de la consulta, simplemente use wc
para contar la cantidad de líneas en el archivo
arraylength=$( wc -l < /tmp/query.csv)
echo $arraylength
Con la opción--batch
, mysql
debería generar el resultado un registro en una línea y columnas separadas por tabulaciones. Puede leer las líneas en una matriz con Bash'smapfile
y procesar la sustitución, o ordenar la sustitución y la asignación de matriz:
mapfile results < <( mysql --batch... < query.sql )
o
set -f # disable globbing
IFS=$'\n' # set field separator to NL (only)
results=( $(mysql --batch... ) )
(Tenga en cuenta que IFS
permanece modificado y globbing deshabilitado después de esto.)
Luego, si desea dividir las columnas de una fila en algunas variables:
IFS=$'\t' read -r col1 col2 col2... <<< "${results[0]}"
Su tarea
linesIN=`cat /tmp/query.csv | sed 's/\t/,/g'`
no es una asignación de matriz (, falta el paréntesis ). Simplemente asigna la salida de la sustitución del comando a una variable de cadena regular. (Cualquier salto de línea se incrustará allí, pero seguirá siendo una sola cadena.)${#linesIN[@]}
todavía funciona ya que en Bash/ksh las matrices de elementos individuales -y las variables escalares actúan de la misma manera.
Otra forma de hacerlo sería canalizar la salida del comando a un bucle while. Tenga en cuenta que desea incluir el -N o los resultados incluyen el nombre de la columna.
#!/bin/bash
#Script to read output from a mysql command line by line
mysql -uroot -p example -N -e "select column from table" | while IFS= read -r loop
do
echo "$loop"
done
Y si solo quiere un conteo, haría un select count(columnName)
e imprimiría los resultados.