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
является только комментарием, это не влияет на содержимое пар ключей.
Я думаю, что имя пользователя является одним из элементов, влияющих на содержимое, потому что я использую двух пользователей, чтобы иметь различные пары клавиш на одном хосте: -)
С самого начала руководства:
Examples:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
Таким образом:
tar cf tarfile.tar Directory-to-tar
Примечание: В Unix говорят, что каталог - это файл, и многое другое: Если он находится в каталоге, то у него есть имя файла, и он является файлом.