Portál AbcLinuxu, 10. května 2025 05:52
touch
vytvaret (vytvori se soubor o nulove delce). Vyslednou hromadu prazdnych souboru pak muzes zabalit tarem.
/home/ferda/mp3/VVV/sf.mp3
/home/ferda/mp3/VVV/ssf.mp3
/home/ferda/mp3/VVV/rsaf.mp3
/home/ferda/mp3/RSF/ad.mp3
.....
isteve@silver:~$ tar -cf test1.tar ./junk/ isteve@silver:~$ tar -tf test1.tar ./junk/ ./junk/file1 ./junk/file2 ./junk/file3 a
isteve@silver:~$ find ./junk ./junk ./junk/file1 ./junk/file2 ./junk/file3
# seznam souborů do souboru find adresar -type -f -printf "%P\n" > seznam # pripadne zatarovat tar -cf seznam.tar seznam # nebo radeji primo gzipnout find adresar -type -f -printf "%P\n" | gzip > seznam.gz # jde prohlizet pomoci zcat, zless, prohledavat pres zgrep, ... zless seznam.gz
#!/usr/bin/env python import os, sys srcdir = os.path.realpath(sys.argv[1]) destdir = sys.argv[2] srchead, srctail = os.path.split(srcdir) srcheadlen = len(srchead) newdir = os.path.join(destdir, srctail) print 'creating root dir', newdir os.mkdir(newdir) for root, dirs, files in os.walk(srcdir): relroot = root[srcheadlen + 1:] for dirname in dirs: newdir = os.path.join(destdir, relroot, dirname) print 'creating dir ', newdir os.mkdir(newdir) for filename in sorted(files): newfile = os.path.join(destdir, relroot, filename) print 'creating file', newfileProgramu se zadávají dva parametry: cesta k originálnímu adresáři a cesta k adresáři, v němž se má udělat ta prázdná kopie.
#!/usr/bin/env python import tarfile, os, sys tarname = sys.argv[1] srcdir = os.path.realpath(sys.argv[2]) srchead, srctail = os.path.split(srcdir) srcheadlen = len(srchead) tar = tarfile.open(tarname + '.tar.bz2', 'w:bz2') for root, dirs, files in os.walk(srcdir): relroot = root[srcheadlen + 1:] for item in dirs + files: fullpath = os.path.join(root, item) relpath = os.path.join(relroot, item) print fullpath, relpath tarinfo = tar.gettarinfo(fullpath, relpath) tarinfo.size = 0 tar.addfile(tarinfo) tar.close()Skriptu se zadají dva parametry: název archivu (bez koncovky) a cesta k adresáři pro archivaci. Vytvoří se soubor s koncovkou tar.bz2. A co mě úplně dostalo je to, že po rozbalení vznikne textový soubor, který připomíná výstup 'ls -l'. To jsem fakt nevěděl.
cd /archive
mkdir -p `cd /home/ferda/mp3; find . -type d -print`
cd /home/ferda/mp3
find . -type f -exec touch /archive/{} \;
?
Traceback (most recent call last):
File "All2tar.py", line 17, in ?
tar.addfile(tarinfo)
File "/usr/lib/python2.3/tarfile.py", line 1270, in addfile
raise ValueError, "name is too long (>%d)" \
ValueError: name is too long (>100)
#!/usr/bin/env python import tarfile, os, sys tarname = sys.argv[1] srcdir = os.path.realpath(sys.argv[2]) srchead, srctail = os.path.split(srcdir) srcheadlen = len(srchead) tar = tarfile.open(tarname + '.tar.bz2', 'w:bz2') tar.posix = False for root, dirs, files in os.walk(srcdir): relroot = root[srcheadlen + 1:] for item in dirs + files: fullpath = os.path.join(root, item) relpath = os.path.join(relroot, item) print fullpath, relpath tarinfo = tar.gettarinfo(fullpath, relpath) tarinfo.size = 0 tar.addfile(tarinfo) tar.close()Bude to fungovat teď? To jsem sám zvědav.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.