Закачать список файлов без структуры каталогов

X не поддерживает масштабирование через xorg.conf или аналогичный, только через xrandr. Вы можете настроить панорамирование на большем виртуальном дисплее, но это не поможет вам увеличить размер того, что отображается на дисплее.

Однако вы можете получить приближение к желаемому дробному масштабированию с помощью комбинации пары изменений. Во-первых, уменьшите общий коэффициент масштабирования до 1; вы можете найти это в gnome-tweak-tool в разделе «Windows», «HiDPI». Затем с помощью инструмента gnome-tweak-tool в разделе «Шрифты» измените «Коэффициент масштабирования» на 1,5; это сделает все шрифты на 50% больше.Это не поможет с элементами пользовательского интерфейса, которые не зависят от размера шрифта (например, изображения), но это будет работать для всех элементов, которые это делают, например кнопок, содержащих текст. Вы также можете получить полное масштабирование пользовательского интерфейса (как текстовых, так и графических элементов) для вашего браузера; в Firefox в about: config измените layout.css.devPixelsPerPx на 1.5, чтобы масштабировать веб-страницы и пользовательский интерфейс. Для Chromium, если вы не получаете хороших результатов автоматически, попробуйте chromium --high-dpi-support = 1 --force-device-scale-factor = 1,5 .

Это не будет работать для более плотных дисплеев, таких как 3200x1800 или 3840x2160, но для 2560x1440 это должно дать полезные результаты; Я использую эти настройки на своем основном ноутбуке с экраном 2560x1440.

4
23.05.2017, 14:33
2 ответа

Аргумент - xform принимает любое количество заменяющих выражений sed , которые очень эффективны. В вашем случае используйте шаблон, который соответствует всему до последнего / , и замените его ничем:

tar cvf allfiles.tar --xform='s|.*/||' $(<mylist.txt)

Добавьте - show-transformed-names , чтобы увидеть новые имена.

Обратите внимание: эта замена применяется ко всем именам файлов, а не только к тем, которые указаны в командной строке, поэтому, например, если у вас есть файл / a / b / c , а в вашем списке просто указано ] / a , то окончательное имя файла будет просто c , а не b / c . Вы всегда можете быть более точным и предоставить точный список замен, например, в вашем случае

--xform='s|^tmp/path2/||;s|^tmp/||;s|^path3/||'

Обратите внимание, что начальный / будет удален tar (если вы не используете -P ) поэтому в приведенных выше выражениях это отсутствует. Кроме того, список каталогов должен быть отсортирован так, чтобы сначала выполнялось самое длинное совпадение, иначе tmp / path2 / не будет совпадать, поскольку tmp / уже был удален. Но вы можете автоматизировать создание этого списка, например:

--xform="$(sed <mylist.txt 's|[^/]*$||; s|^/||; s:.*:s|^&||;:' | sort | tr -d '\n')"
5
20.08.2021, 11:56

С GNU tar вы можете использовать -C когда угодно и когда угодно, с немедленным вступлением в силу .

$ tree
.
├── 1
│   └── aaa
├── 2
│   └── bbb
└── 3
    └── ccc



# Caveat: the directory change is always relative to directory tar is using *at
# that time*, so the following doesn't work:
$ tar -cf foo.tar -C 1 aaa -C 2 bbb -C 3 ccc  
tar: 2: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

$ tar -cf foo.tar -C 1 aaa -C ../2 bbb -C ../3 ccc

$ tar tf foo.tar
aaa
bbb
ccc


# You can avoid the special case for the first directory by always specifying
# an absolute path:
$ tar -cf foo.tar -C $(pwd)/1 aaa -C $(pwd)/2 bbb -C $(pwd)/3 ccc



# Now let's create that automatically from your file:
$ cat mylist.txt
/tmp/1/aaa
/tmp/2/bbb
/tmp/3/ccc

$ while read -r line; do printf '-C %s %s ' $(dirname "$line") $(basename "$line") ; done < mylist.txt
-C /tmp/1 aaa -C /tmp/2 bbb -C /tmp/3 ccc 

# That looks about right. Let's use it in our tar command:
$ tar -cvf foo.tar $(while read -r line; do printf '-C %s %s ' $(dirname "$line") $(basename "$line") ; done < mylist.txt)
aaa
bbb
ccc
3
20.08.2021, 11:56

Теги

Похожие вопросы