Я установил переменную $TERM добавление строки XTerm*termName: xterm-256color в мой.Xresources файл.
Это прекрасно, пока Вы знаете о том, что Вы сделали; большинство терминалов GUI поддерживает это.
Можно также установить его из командной строки или в сценарии
export TERM=xterm-256color
Это только относится к тому терминалу или последующим детям.
Портативное значение по умолчанию было бы справедливо xterm
, что означает 16 цветной поддержки. Если у Вас будет 256 наборов цветов, и Ваш терминал не поддерживает их, то запущение 256 цветных приложений TUI будет просто выглядеть странным; Вы, вероятно, заметите сразу же. Но это не должно быть опасно.
Используйте pax и его параметр -s
, чтобы переименовывать файлы по мере их добавления в архив. Pax является заменой POSIX традиционных утилит tar
и cpio
; некоторые дистрибутивы Linux не устанавливают его по умолчанию, но он всегда должен быть доступен в виде пакета.
pax -w -x cpio -s '~^[/]*~~' root-directory >archive.cpio
Если у вас есть python и:
pip install libarchive-c
) root
в текущем каталоге (я использовал mkdir -p root / xyz; echo 1> root / abc.txt; echo 2> root / xyz / def.txt
) сохраните следующее как abscpio
и сделайте его исполняемым ( chmod 755 abscpio
)
#! / usr / bin / env python
import os
import sys
from libarchive import ffi
from libarchive.write import (
new_archive_write, ArchiveWrite, new_archive_read_disk)
из libarchive.entry импортировать new_archive_entry, ArchiveEntry
из libarchive.ffi import (
ARCHIVE_EOF,
entry_sourcepath,
entry_clear,
read_next_header2,
read_disk_descend,
write_header,
write_data,
write_finish_entry,
)
class AbsArchiveWrite (ArchiveWrite):
def add_abs_file (self , path, store_path):
"" "Прочитать указанные пути с диска и добавить их в архив.
" ""
write_p = self._pointer
block_size = ffi.write_get_bytes_per_block (write_p)
if block_size <= 0:
block_size = 10240 # pragma: no cover
with new_archive_entry ( ) как entry_p:
entry = ArchiveEntry (None, entry_p)
с new_archive_read_disk (путь) как read_p:
, а 1:
r = read_next_header2 (read_p, entry_p )
if r == ARCHIVE_EOF:
break
entry.pathname = store_path
read_disk_descend (read_p)
write_header (write_p, entry_p) {{ 1}} попробуйте:
с open (entry_sourcepath (entry_p), 'rb') как f:
, а 1:
data = f.read (block_size) {{1} } если не данные:
break
write_data (write_p, data, len (data))
кроме IOError как e:
if e.errno! = 21:
raise # pragma: no cover
write_finish_entry (write_p)
entry_clear (entry_p)
если os.path.isdir (путь):
break
base_dir = sys.argv [2]
с new_archive_write ('cpio', None) как archive_p:
ffi.write_open_filename_w (archive_p, sys.argv [1]) {{1 }} a = AbsArchiveWrite (archive_p)
для root, dir_names, file_names в os.walk (base_dir):
для dir_name в dir_names:
full_name = os .path.join (root, dir_name)
a.add_abs_file (full_name, full_name.replace (base_dir, '/', 1))
для file_name в file_names:
full_name = os.path.join (root, file_name)
a.add_abs_file (full_name, full_name.replace (base_dir, '/', 1))
print '---- - листинг '+ sys.argv [1]
os.system (' cpio -itv -I '+ sys.argv [1])
вы можете сделать:
abscpio my_arch.cpio root/
с выводом чего-то вроде:
----- listing my_arch.cpio
drwxrwxr-x 2 anthon users 0 Jun 25 18:59 /xyz
-rw-rw-r-- 1 anthon users 2 Jun 25 18:59 /abc.txt
-rw-rw-r-- 1 anthon users 0 Jun 25 18:59 /xyz/def.txt
для производства вы можете удалить последние две строки из скрипта.
Ссылки тоже сохраняются, но я не пробовал другие типы "файлов".