Az alábbi könyvtárakban lévő fájlokat kell átnevezni, úgy hogy 1-től sorszám.jpg legyen a nevük és egy könyvtárba kerüljenek. Ki hogyan oldaná meg? Shell script illetve awk.
TMP$ ls -R
.:
1 2 3 4 5 6 7
./1:
A001.jpg A005.jpg Am002.jpg Am006.jpg B004.jpg Bm001.jpg Bm005.jpg
A002.jpg A006.jpg Am003.jpg B001.jpg B005.jpg Bm002.jpg Bm006.jpg
A003.jpg A007.jpg Am004.jpg B002.jpg B006.jpg Bm003.jpg
A004.jpg Am001.jpg Am005.jpg B003.jpg B007.jpg Bm004.jpg
./2:
A001.jpg A005.jpg Am002.jpg B001.jpg B005.jpg Bm002.jpg
A002.jpg A006.jpg Am003.jpg B002.jpg B006.jpg Bm003.jpg
A003.jpg A007.jpg Am004.jpg B003.jpg B007.jpg Bm004.jpg
A004.jpg Am001.jpg Am005.jpg B004.jpg Bm001.jpg Bm005.jpg
./3:
A001.jpg A005.jpg Am002.jpg B001.jpg B005.jpg Bm002.jpg
A002.jpg A006.jpg Am003.jpg B002.jpg B006.jpg Bm003.jpg
A003.jpg A007.jpg Am004.jpg B003.jpg B007.jpg Bm004.jpg
A004.jpg Am001.jpg Am005.jpg B004.jpg Bm001.jpg Bm005.jpg
./4:
A001.jpg A005.jpg Am002.jpg B001.jpg B005.jpg Bm002.jpg
A002.jpg A006.jpg Am003.jpg B002.jpg B006.jpg Bm003.jpg
A003.jpg A007.jpg Am004.jpg B003.jpg B007.jpg Bm004.jpg
A004.jpg Am001.jpg Am005.jpg B004.jpg Bm001.jpg Bm005.jpg
./5:
A001.jpg A005.jpg Am003.jpg B002.jpg B006.jpg Bm004.jpg
A002.jpg A006.jpg Am004.jpg B003.jpg Bm001.jpg Bm005.jpg
A003.jpg Am001.jpg Am005.jpg B004.jpg Bm002.jpg
A004.jpg Am002.jpg B001.jpg B005.jpg Bm003.jpg
./6:
A001.jpg A005.jpg Am003.jpg B002.jpg B006.jpg Bm004.jpg
A002.jpg A006.jpg Am004.jpg B003.jpg Bm001.jpg Bm005.jpg
A003.jpg Am001.jpg Am005.jpg B004.jpg Bm002.jpg
A004.jpg Am002.jpg B001.jpg B005.jpg Bm003.jpg
./7:
A001.jpg A005.jpg Am002.jpg B001.jpg B005.jpg Bm002.jpg Bm006.jpg
A002.jpg A006.jpg Am003.jpg B002.jpg B006.jpg Bm003.jpg
A003.jpg A007.jpg Am004.jpg B003.jpg B007.jpg Bm004.jpg
A004.jpg Am001.jpg Am005.jpg B004.jpg Bm001.jpg Bm005.jpg
- 1260 megtekintés
Hozzászólások
én könyvtáranként for ciklussal csináltam. közben egy olyan dologra nem jöttem rá, hogy find -exec -nek hogyan adjam meg a következőt: pl 1..9 .jpg-t 01..09 .jpg-re átnevezni. find minduntalan ./1.jpg-t talál -exec mv {} 0{} pedig 0./1.jpg.
- A hozzászóláshoz be kell jelentkezni
konkrétan így, eredmény alant:
TMP$ a=1 ; for i in `ls -1` ; do cd $i ; for j in `ls -1` ; do mv $j $a ; let a=$a+1 ; done ; cd .. ; done
jó kihagytam a .jpg-t, de ez most irreleváns (illetve akkor már lehetne
mv $j ../$a.jpg
), hanem az érdekelne, hogyan lehetne 3 karakteres minden file név, hogy mondjuk ls -1 sorba tegye és ne ilyen output legyen:
TMP$ ls -1
1
10
100
11
12
13
14
15
16
17
18
19
2
TMP$ ls -R
.:
1 2 3 4 5 6 7
./1:
1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 3 4 5 6 7 8 9
./2:
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
./3:
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
./4:
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
./5:
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 99
./6:
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
./7:
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
- A hozzászóláshoz be kell jelentkezni
látom vmelyik egyetemen/fősulin ezt adták házinak :)
(2 nap alatt a 3. ugyanilyen kérdést látom a 3. fórumon) :)
- A hozzászóláshoz be kell jelentkezni
ez kivétel, ugyanis real life példa ;-)
- A hozzászóláshoz be kell jelentkezni
Pl.:
find . -type f -name *.jpg | (i=1; while read file ; do mv "$file" "$target_dir/$(printf %04d $i).jpg"; let i++; done)
Arra azért figyelj, hogy a find ne másszon bele a target_dir-be.
- A hozzászóláshoz be kell jelentkezni
Vigyázz, a find random sorrendben járja be a könyvtárakat és fájlokat.
- A hozzászóláshoz be kell jelentkezni
akkor még egy sort a find és a while közé és máris van sorrend.....
- A hozzászóláshoz be kell jelentkezni
igen, ez a példa sort-al ok:
TMP$ find . -type f -name *.jpg | sort | (i=1; while read file ; do mv "$file" "./$(printf %03d $i).jpg"; let i++; done)
- A hozzászóláshoz be kell jelentkezni
a sortnak önmagában nem sok értelme van, vagy -n vagy -R :)
(előbbi persze megint csak kiegészítésre szorul:) )
- A hozzászóláshoz be kell jelentkezni
már hogy random? elvileg i-node szám alapján van sorban, de egész érdekesen csinálja:
TMP$ find . -type f -name *.jpg -ls | awk -F" " '{ print $1 " " $11}'
145328 ./1/Bm001.jpg
145329 ./1/Bm002.jpg
145330 ./1/Bm003.jpg
145331 ./1/Bm004.jpg
145332 ./1/Bm005.jpg
145333 ./1/Bm006.jpg
145321 ./1/B001.jpg
145322 ./1/B002.jpg
145323 ./1/B003.jpg
145324 ./1/B004.jpg
145325 ./1/B005.jpg
145326 ./1/B006.jpg
145327 ./1/B007.jpg
145315 ./1/Am001.jpg
145316 ./1/Am002.jpg
145317 ./1/Am003.jpg
145318 ./1/Am004.jpg
145319 ./1/Am005.jpg
145320 ./1/Am006.jpg
38031 ./1/A001.jpg
97378 ./1/A002.jpg
145308 ./1/A003.jpg
145311 ./1/A004.jpg
145312 ./1/A005.jpg
145313 ./1/A006.jpg
145314 ./1/A007.jpg
- A hozzászóláshoz be kell jelentkezni
Ez mintha nem lenne teljesen korrekt, én úgy tudom, h nem random, hanem a könyvtárbeli előfordulási sorrendben - ahogy pl. az "ls -f" is kiírja.
(Ez a sorrend kb. a fájlok/könyvtárak létrehozásával egyezik meg - nyilván feltéve, h közben nem takarítasz)
- A hozzászóláshoz be kell jelentkezni
Természetesen a "random" helytelen szóhasználat volt részemről, csak azt kívántam hangsúlyozni, hogy nem ábécében.
Valóban a könyvtárbeli előfordulási sorrendben járja be, lásd az ls -u vagy -U kapcsolója (mindig elfelejtem hogy melyik), már amennyire az "előfordulási sorrend" értelmezhető.
Régi fájlrendszerek lineárisan tárolták a bejegyzéseket, létrehozási sorrendben, de ha töröltél egy fájlt, akkor ott keletkezett egy akkora lyuk, ahova a következőnek létrehozott a fájlnév hosszának függvényében vagy belefért, vagy nem.
Újabb fájlrendszerek már fastruktúrát vagy valami hasonlót használnak, továbbá a fájlrendszer létrehozásakor sorsolt titkos véletlenszámmal megkavarják a hash algoritmust, hogy ne legyen DoS-olható a rendszer. Tehát ha kétszer egymás után ugyanazzal az mkfs paranccsal csinálsz ugyanakkora fájlrendszert és ugyanazzal a parancssorozattal hozod létre a fájlokat, akkor is eltérő lesz a két sorrend.
- A hozzászóláshoz be kell jelentkezni
szép a pipe utáni rész :)
- A hozzászóláshoz be kell jelentkezni