Да, просто используйте для восстановления изображения из Clonezilla :
cat sda5.ext3-ptcl-img.gz.a* | gunzip -c | partclone.restore -d -s - -o /dev/sda5
-121--45264-
Современная реализация cat (sunos-4.0 1988) использует mmap () для отображения всего файла, а затем вызывает 1x write () для этого пространства. Такая реализация не будет закольцовываться, пока виртуальная память позволяет отобразить весь файл.
Для других реализаций зависит от того, больше ли размер файла буфера ввода-вывода.
-121--26469-
Время выполнения Java учитывает переменные среды, их можно задать в системных файлах запуска.
Oracle Java использует _ JAVA _ OPTIONS
, IBM Java использует IBM _ JAVA _ OPTIONS
.
Si no le importa ejecutarlo dos veces (para obtener el conteo, luego las líneas ), puede usar grep.
Por la cuenta:
tar tvf myfile.tar | grep <path> | wc -l
Para las líneas, simplemente elimine| wc -l
Si prefiere ejecutar tar
una sola vez, puede guardar la salida en un archivo y luego cat
en grep y wc. El guión en conjunto se vería así:
tmp_file=$(mktemp)
tar tvf myfile.tar > $tmp_file
cat $tmp_file | grep <subdir> | wc -l
cat $tmp_file | grep <subdir>
rm $tmp_file
Si desea una -línea, probablemente haya un truco que pueda hacer con la sustitución y redirección de procesos, pero si está ejecutando esto con alguna cadencia, probablemente terminará colocándolo en un script/alias/función de todos modos, esto es un poco más fácil de leer y entender.
Si tiene varias rutas en el archivo tar que le gustaría eliminar, puede ponerlas todas en un archivo de texto y usargrep -f <paths file>
tar -tvf file.tar | grep '^-' | wc -l
Esto contará el número de líneas en la salida tar
que comienzan con -
(, es decir, archivos ). Cambie /^-
a /^[^d]/
para contar "cualquier cosa menos directorios" si tiene tipos especiales de archivos en su archivo.
Otra manera, conawk
:
tar -tvf file.tar | awk '/^-/ { n++ } END { print n }'
Ambos comandos generan 7
, el número total de archivos en el archivo.
Si desea recuentos separados para cada subcarpeta:
tar -tvf file.tar | awk '/^d/ { d = $NF; next } { n[d]++ } END { for (d in n) print n[d], d }'
Esto genera
4./root_folder/subfolder/folder_files_2/
3./root_folder/subfolder/folder_files_1/
por los datos que has proporcionado.
El código awk
en este último ejemplo selecciona el nombre del directorio de cualquier línea que comience con d
y lo usa como clave en una matriz asociativa. La entrada de matriz se incrementa para cada archivo encontrado. Al final, se imprimen todas las entradas y su recuento.
Si tiene GNU tar, tiene una opción--to-command
:
--to-command=COMMAND
Pipe extracted files to COMMAND. The argument is the pathname
of an external program, optionally with command line
arguments. The program will be invoked and the contents of
the file being extracted supplied to it on its standard
output. Additional data will be supplied via the following
environment variables:
TAR_FILETYPE
Type of the file. It is a single letter with the
following meaning:
f Regular file
d Directory
l Symbolic link
h Hard link
b Block device
c Character device
Currently only regular files are supported.
...
TAR_FILENAME
The name of the file.
Estas variables se pueden usar para manejar de forma segura nombres de archivos con espacios, etc.
Por ejemplo, al usar la sustitución de cadena de shell para eliminar el nombre de archivo de la ruta dada, luego al usar sed para imprimir solo las rutas de los directorios que no son -, luego puede ordenar y aplicar uniq -c
para obtener el conteo:
tar xf foo.tar --to-command 'echo "$TAR_FILETYPE" "${TAR_FILENAME%/*}"' |
sed -n '/^[^d]/s/^. //p' |
sort |
uniq -c
Si tiene GNU sed, sort y uniq,puede usar sus opciones -z
y printf "%s %s\0"
en lugar de echo
para manejar de forma segura todos los nombres de archivo.
Ejemplo:
% tar xf dev/pacaur/byobu/byobu_5.124.orig.tar.gz --to-command 'printf "%s %s\0" "$TAR_FILETYPE" "${TAR_FILENAME%/*}"' | sed -zn '/^[^d]/s/^. //p' | sort -z | uniq -zc | tr '\0' '\n'
15 byobu-5.124
2 byobu-5.124/Applications/Byobu.app/Contents
1 byobu-5.124/Applications/Byobu.app/Contents/MacOS
8 byobu-5.124/Applications/Byobu.app/Contents/Resources
4 byobu-5.124/etc/byobu
3 byobu-5.124/etc/profile.d
1 byobu-5.124/experimental
23 byobu-5.124/po
1 byobu-5.124/snap
38 byobu-5.124/usr/bin
43 byobu-5.124/usr/lib/byobu
18 byobu-5.124/usr/lib/byobu/include
1 byobu-5.124/usr/share/appdata
4 byobu-5.124/usr/share/byobu/desktop
12 byobu-5.124/usr/share/byobu/keybindings
4 byobu-5.124/usr/share/byobu/pixmaps
1 byobu-5.124/usr/share/byobu/pixmaps/highcontrast
11 byobu-5.124/usr/share/byobu/profiles
4 byobu-5.124/usr/share/byobu/status
3 byobu-5.124/usr/share/byobu/tests
3 byobu-5.124/usr/share/byobu/windows
3 byobu-5.124/usr/share/dbus-1/services
4 byobu-5.124/usr/share/doc/byobu
37 byobu-5.124/usr/share/man/man1
1 byobu-5.124/usr/share/sounds/byobu
Другой вариант:
tar tf archive.tar |
awk '
{ if (gsub("[^/]+$", "")) { h[$0]++} }
END { for (f in h) { printf "%d\t%s\n", h[f], f } }
'
Первый оператор awk
удаляет имена файлов и подсчитывает экземпляры результирующих путей к каталогам. Второй запускается, когда ввод полностью использован (, то есть в конце стандартного ввода ), и печатает список путей и их соответствующие счетчики.
Все это можно уместить в одну строку, если вы предпочитаете (просто буквально соединить всю партию ). Я разделил его здесь для удобства чтения.
Результат работы с вашим архивом:
4 ./root_folder/subfolder/folder_files_2/
3 ./root_folder/subfolder/folder_files_1/