Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Změna datumu adresáře dle souborů uvnitř

Pokud tam bude linux a bash a další, na linuxu obvyklé věci, tak by mělo fungovat tohle:

find -type d |grep -v "^\.$"|sort -r|sed 's@\(.*\)@echo \1;touch --reference="\1/\`ls -1 \1|head -n 1\`" "\1"@'

s použitím ve stylu ( /home/gilhad/tmp/C je adresář, ve kterém jsou upravované adresáře)


[gilhad@cobra-mk3(7) ~] $ cd /home/gilhad/tmp/C
[gilhad@cobra-mk3(7) C] $ ls -al
total 24
drwxr-xr-x  6 gilhad users 4096 2023-01-14 20:41 .
drwxr-xr-x 17 gilhad users 4096 2023-01-14 20:41 ..
drwxr-xr-x  2 gilhad users 4096 2023-01-14 20:42 test1
drwxr-xr-x  2 gilhad users 4096 2023-01-14 20:42 test2
drwxr-xr-x  2 gilhad users 4096 2023-01-14 20:42 test3
drwxr-xr-x  2 gilhad users 4096 2023-01-14 20:43 test4
[gilhad@cobra-mk3(7) C] $ find -type d |grep -v "^\.$"|sort -r|sed 's@\(.*\)@echo \1;touch --reference="\1/\`ls -1 \1|head -n 1\`" "\1"@'|sh
./test4
./test3
./test2/test2.b
./test2/test2.a
./test2
./test1
[gilhad@cobra-mk3(7) C] $ ls -al
total 24
drwxr-xr-x  6 gilhad users 4096 2023-01-14 20:41 .
drwxr-xr-x 17 gilhad users 4096 2023-01-14 20:41 ..
drwxr-xr-x  2 gilhad users 4096 2017-04-05 12:35 test1
drwxr-xr-x  2 gilhad users 4096 2007-01-25 16:30 test2
drwxr-xr-x  2 gilhad users 4096 2022-06-04 13:07 test3
drwxr-xr-x  2 gilhad users 4096 2007-09-17 08:57 test4
[gilhad@cobra-mk3(7) C] $ 

a s vysvětlením

ls -al
vypiš v dlouhém formátu s časem

find -type d |grep -v "^\.$"|sort -r|sed 's@\(.*\)@echo \1;touch --reference="\1/\`ls -1 \1|head -n 1\`" "\1"@'

find -type d
najdi všechny podadresáře - jo, jede to rekurzivně celou podstrukturu, ale ty to stejně máš ploché, kdybys chtěl jen jednu úroveň, tak HNED za find přidej parametr -maxdepth 1

grep -v "^\.$"
vyhoď adresář "./"

sort -r
setříď dle abecedy, reverzně - čili podadresáře před rodiče, zpracování dle abecedy, nikoli náhodného pořadí, jak to leží v adresáři nesetříděné

sed 's@\(.*\)@echo \1;touch --reference="\1/\`ls -1 \1|head -n 1\`" "\1"@'
uprav seznam adresářů na seznam příkazů takto

s@
nahrazuj, jako oddělovač použijeme zavináč, abychom si neblokovali lomítko

\(.*\)
najdi cokoli a ber to jako první hodnotu (čili \1)

@
konec hledání, nahrazuj tímto

echo \1;
výpis, co děláme

touch --reference="\1/\`ls -1 \1|head -n 1\`" "\1"
nastav čas pro zpracovávaný adresář "\1"

--reference="\1/\`ls -1 \1|head -n 1\`"
podle souboru, který vypíše vložený shell - vše mezi `a` (oeskapovanýma \) - před to přidej adresář a lomítko \1/

ls -1 \1
vypiš soubory z adresáře po jednom na řádek

head -n 1
vypiš pouze první řádek

|sh
výstup přesměruj do shellu, který ho provede jako příkazy

ten výstup je jako

echo ./test3;touch --reference="./test3/`ls -1 ./test3|head -n 1`" "./test3"

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny