Portál AbcLinuxu, 30. prosince 2025 07:32
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', newfile
Programu 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.
. Potrebujš python na to aby si urobil
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.