Как добавить определенный каталог для файла во время поколения файла tar?

rm -r работает по очереди над каждым из своих аргументов. Если аргумент является каталогом, он перечисляет каталог (с функциями opendir и readdir или каким-либо эквивалентным методом) и оперирует каждой записью по очереди. Если запись является каталогом, она рекурсивно исследует эту запись.

Это точно такой же метод, который используют другие приложения для рекурсивного обхода каталогов - найти , ls -Rf и т. д.

Порядок обхода непредсказуем. В большинстве файловых систем порядок воспроизводим до тех пор, пока файл не добавляется, не удаляется или не переименовывается в каталоге (в теории порядок может быть совершенно случайным и меняться каждый раз, но я не могу придумать файловую систему, где это происходит). На нескольких файловых системах порядок, в общем, можно вывести из имен файлов или из порядка, в котором создавались файлы, или из комбинации того и другого, но нужно знать точные детали файловой системы, и он мог варьироваться в зависимости от версии драйвера. Порядок прохождения - это не то, на что можно положиться.

Обратите внимание, что ls или echo * сортируют файлы в лексикографическом порядке. поиск и ls -f не сортируются.

Единственное, на что вы можете положиться, это то, что аргументы обрабатываются по порядку. Таким образом, если бы C/ был еще частично там, это означало бы, что Dest/ был нетронутым. Если C/ отсутствует, можно получить представление о том, где файлы были удалены в Dest/, проверив время изменения каталога и сравнив их с временем удаления C/ или временем окончания копирования. Первым удаляемым файлом может быть файл непосредственно в Dest/ или где-то глубоко в иерархии, в зависимости от того, была ли первая запись в Dest/, которую rm пройден, каталогом или нет.

Скорость rm в основном зависит от количества удаляемых файлов. Требуется очень большой файл, чтобы оказать заметное влияние на время удаления. Основная часть работы по очереди удаляет каждую запись каталога. Данные файла не стираются, для удаления содержимого файла требуется только пометить блоки, которые он использовал, как свободные, что относительно быстро.

-121--15179-

Это мой сценарий оборачивает ffmpeg для преобразования любого поддерживаемого формата звука в AAC (используя кодер libfdk-aac, который рекомендуется кодировщиком aac по ffmpeg wiki).

#!/usr/bin/env python2.7

from optparse import OptionParser
from subprocess import call
from os.path import splitext
import sys, os

def ffaac(filename, opts):
    cmd = ['ffmpeg', '-hide_banner', '-y', '-i', filename, 
            '-vn', '-c:a', 'libfdk_aac']
    profile = {'lc':'aac_low', 'he':'aac_he', 'he2':'aac_he_v2', 
            'ld':'aac_ld', 'eld':'aac_eld'}
    if not opts.br and not opts.vbr:
        cmd.extend(['-b:a', '320k'])
    if opts.br:
        cmd.extend(['-b:a', str(opts.br)+'k'])
    if opts.vbr:
        cmd.extend(['-vbr', opts.vbr])
    if opts.ar:
        cmd.extend(['-ar', opts.ar])
    if opts.ch:
        cmd.extend(['-ac', opts.ch])
    cmd.extend(['-profile:a', profile[opts.prof]])
    if opts.prof == 'eld' and opts.sbr:
        cmd.extend(['-eld_sbr', '1'])
    cmd.extend(['-f', 'adts'])

    if filename.lower().endswith('.aac'):
        return
    outfile = splitext(filename)[0] + '.aac'
    cmd.append(outfile)

    return call(cmd)

if __name__=='__main__':
    parser = OptionParser(sys.argv[0]+' [OPTIONS] FILE ...')
    parser.add_option('-b', metavar='NUM', type=int, dest='br', help='bitrate')
    parser.add_option('-r', metavar='NUM', choices=['8000','11025','16000','22050','32000', '44100', '48000'], dest='ar', help='sample rate: 8000/11025/22050/32000/44100/48000')
    parser.add_option('-c', metavar='NUM', choices=['1','2'],dest='ch', help='channels: 1/2')
    parser.add_option('-p', metavar='TYPE',choices=['lc', 'he', 'he2', 'ld', 'eld'], default='lc', dest='prof', help='profile: lc/he/he2/ld/eld')
    parser.add_option('-v', metavar='QUAL', choices=['1', '2', '3', '4', '5'], dest='vbr', help='vbr quality: 1/2/3/4/5')
    parser.add_option('-s', action='store_true', dest='sbr', help='use SBR for ELD')
    parser.add_option('-d', action='store_true', dest='delete',help='delete source after converting')
    opts,  args = parser.parse_args()
    for f in args:
        if ffaac(f, opts) == 0 and opts.delete :
            try:
                os.remove(f)
            except OSError:
                pass

Сообщение справки командной строки:

Usage: /Users/leon/bin/ffaac.py [OPTIONS] FILE ...

Options:
  -h, --help  show this help message and exit
  -b NUM      bitrate
  -r NUM      sample rate: 8000/11025/22050/32000/44100/48000
  -c NUM      channels: 1/2
  -p TYPE     profile: lc/he/he2/ld/eld
  -v QUAL     vbr quality: 1/2/3/4/5
  -s          use SBR for ELD
  -d          delete source after converting

-121--34238-

Из rfc4716 мы знаем, что имя пользователя @ hostname в id _ rsa.pub является только комментарием, это не влияет на содержимое пар ключей.

Я думаю, что имя пользователя является одним из элементов, влияющих на содержимое, потому что я использую двух пользователей, чтобы иметь различные пары клавиш на одном хосте: -)

1
12.08.2014, 01:45
1 ответ

С самого начала руководства:

Examples:
  tar -cf archive.tar foo bar  # Create archive.tar from files foo and bar.

Таким образом: tar cf tarfile.tar Directory-to-tar


Примечание: В Unix говорят, что каталог - это файл, и многое другое: Если он находится в каталоге, то у него есть имя файла, и он является файлом.

0
28.01.2020, 01:54

Теги

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