Файлы TAR: переместите файлы от подкаталогов до основного каталога

Дело в том, что многие из более простых терминалов поддерживают только ограниченное количество цветов ANSI [Black | Красный | Зеленый | Желтый | Синий | Пурпурный | Голубой | Голубой | Белый ] обычный или жирный, всего 16.

Профиль xterm-256color поддерживается некоторыми более современными терминальными эмуляторами, такими как гном-терминал и PuTTY, но 256 цветов все еще недостаточно для того, чтобы охватить всю гамму из 16 миллионов цветов в цветовом пространстве RGB, которые потребовались бы для отображения каждого RGB-кода, как и предполагалось.

1
10.05.2015, 10:58
4 ответа

Я думаю, что это способ сделать это, чтобы создать новый каталог, как и источник резервного копирования и заполнить его Hardlinks. Я надеюсь, что целое дерево каталогов, которое вы хотите сделать резервную копию, на одном объеме.

> pwd
/path/to/documents
> cd /path/to/
> mkdir tar-documents
> mkdir tar-documents/documents
> ln /path/to/documents/file1
> ln /path/to/documents/file2
> ln /path/to/documents/folder1/file3 folder1:file3
[...]

Если количество файлов высокое, то это должно быть сделано скриптом.

После этого вы запустите TAR в этом каталоге:

> cd /path/to/tar-documents
> tar cvzf /backup/path/documents.tar.gz documents

В конце может быть полезно удалить каталог TAR .

0
27.01.2020, 23:51

Вы можете жестко связать их в другом каталоге и затем tar

# find all files in directory named directory
find directory -type f | \
while read f;
do
    f2=`echo "$f"|sed -e 's/\//:/g'`  # replace / with :
    ln "$f" "directory2/$f2"  # create hardlinks in directory2/
done

Это создаст следующие ссылки

directory/file1 => directory2/directory:file1
directory/file2 => directory2/directory:file2
directory/folder1/file3 => directory2/directory:folder1:file3
directory/folder1/file4 => directory2/directory:folder1:file4
directory/folder2/file5 => directory2/directory:folder2:file5
directory/folder3/folder4/file6 => directory2/directory:folder3:folder4:file6
directory/folder3/folder4/file7 => directory2/directory:folder3:folder4:file7
1
27.01.2020, 23:51

Вы можете попробовать это.

Найти все файлы * TAR в текущей папке и скопируйте в MainDirectory папку или где хотите.

Найти. «* Tar *» --eexec CP {} ~ / maindirectory / \;

0
27.01.2020, 23:51

Во-первых, если вы хотите заархивировать каталог, то лучше всего использовать идентичную файловую структуру в архиве. . То, что вы просите, - это переименование ваших файлов, чтобы включить их родительские каталоги, после двоеточия, за которым следует имя файла. Каким бы странным для меня ни было это вне контекста, мне удалось подойти довольно близко, используя параметр - transform :

 --transform=EXPRESSION, --xform=EXPRESSION
                         use sed replace EXPRESSION to transform file

Пример этого изложен в this stackexchange answer ( Однако имейте в виду, что это неправильный синтаксис sed ) . Используя - transform , ваша команда будет такой:

tar czvf documents.tar.gz --transform 's/\//:/g' documents

К сожалению, это не дало желаемого эффекта, так как он сохраняет ваши подкаталоги в архиве, но они пусты, а файлы находятся в корне архив, а не в первом родительском каталоге.

Я думал, что у меня есть решение для вас, использующее параметр -C, --directory , но он не будет очень динамичным и не позволит сохранить имена каталогов файлов в новом имени файла. .

Решение, которое я нашел, представляет собой гибрид того, что у вас есть, и использования команды преобразования:

find documents -type f -print0 | xargs -0 tar czvf test.tar.gz --no-recursion --transform 's/\//:/g' --transform 's:\::/:1' documents/

Кроме того, в вашем вопросе вы называете свой файл с расширением .gz , но его не хватало параметр -z, --gzip .

Надеюсь, это поможет,
Алекс

0
27.01.2020, 23:51

Теги

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