Я наконец нашел решение для этой проблемы. Эта страница показывает, как использовать xmodmap для переотображения кода клавиши на символ, и с тех пор showkey
списки коды клавиши этих ключей, я могу просто сделать это:
xmodmap -e 'keycode 100=Alt_R'
xmodmap -e 'keycode 126=Super_R'
xmodmap -e 'keycode 127=Menu'
Проблема решила, но я все еще не понимаю то, что вызвало ее.
Я разобрал решение смолы самостоятельно.
Он удаляет один файл после сжатия в целевой файл.
Скорость сжимания не совсем быстро. Команда выглядит как:
tar -zcvf my_log.tar.gz *.log --remove-files
В дополнение к @apaul, я подчеркиваю, что сжимающие файлы индивидуально
bzip2 *.log.*
(замените BZIP2 по GZIP, XZ, или что когда-либо ваш любимый файл ZIP) Может быть важно:
Таким образом, вы все еще можете увидеть ( bzcat file.bz2
), поиск ( bzgrep file.bz2
), редактировать ( vi file.bz2
) Сжатый файл
и удалите более старых, когда это необходимо.
GZIP
или BZIP2
будет сжать файл и автоматически удалить не сжатый (это их поведение по умолчанию).
Однако имейте в виду, что в то время как процесс сжатия оба файла будут существовать.
Если вы хотите сжать файлы журнала (т. Е. Файлы, содержащие текст), вы можете предпочесть BZIP2
, поскольку он имеет лучшее соотношение для текстовых файлов.
bzip2 -9 myfile # will produce myfile.bz2
Сравнение и примеры:
$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile
$ bzip2 -9 myfile
$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2
$ bunzip2 myfile.bz2
$ gzip -9 myfile
$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz
Обновление Как сказал мне @jjoao, в одном комментарии xz
, кажется, имеет наилучшее соотношение на простых файлах со своими параметрами по умолчанию:
$ xz -9 myfile
$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz
для Больше информации, вот интересный ориентир для разных инструментов: http://binfalse.de/2011/04/04/Comparison-of-compression/
Для примера выше, я использую -9
Для лучшего отношения сжатия, но если время, необходимое для сжимания данных, является более важным, чем соотношение, вам лучше не использовать его (используйте более низкую опцию, то есть -1
или что-то между ).
Я пытался сделать это на BSD-версии tar. В этом случае опция --remove-files недоступна. В конце концов, я сделал (и работал):
find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;
когда вы используете перенаправление ввода-вывода в bash с >
, исходный файл будет пустым перед записью новых данных.
существует команда dd, которая может перезаписывать часть содержимого файла вместо очистки файла перед записью, поэтому может работать следующая команда:
gzip -c some-file | dd conv=notrunc of=some-file
В большинстве случаев сжатые данные меньше оригинальных. когда gzip читает первые N байтов, он выводит только M байтов, где M < N, поэтому можно безопасно перезаписать первые M байтов исходного файла со сжатыми данными, и оставить данные после первых N байтов без изменений.
но данные будут после окончания gzip.
однако, если dd писать быстрее, чем gzip, я не знаю, что произойдет.
или вы можете сопоставить файл с блочным устройством с помощью функции lossup. для блочного устройства операция записи не приведет к удалению исходных данных.
loop_device=$(losetup -f--show some-file)
gzip -c $loop_device > $loop_device