Potrzebuję stworzyć skrypt, który w katalogu gdzie zostanie uruchomiony, znajdzie ostatnio utworzony/zmodyfikowany podkatalog i przekaże go jako argument do polecenia.
Nigdy nie pisałem skryptów w bashu i zastanawiam się, od której strony to “ugryźć”. Na pewno wychodzę od plecenia
ls -lt
dalej tylko się domyślam, że trzeba by użyć polecenia grep, chociaż podejrzewam, że awk będzie lepszym wyjściem. Niestety nie mam za bardzo pomysłu jak do prawidłowo użyć.
ls -td $HOME/* | head -n 1
to powinno działać $HOME to katalog domowy możesz zmienić na dowolny
a skrypt
#!/bin/bash
if [ "${1}" = "" ]; then
echo "Skrypt wymaga podania ścieżki gdzie będzie wyszukiwanie np /home/user"
exit 1
fi
ls -td ${1}/* | head -n 1
np.
[user@localhost]$ ./find.sh
Skrypt wymaga podania ścieżki gdzie będzie wyszukiwanie np /home/user
[user@localhost]$ ./find.sh /home/user
/home/user/Muzyka
teraz utworze plik w innym katalogu Pobrane
[user@localhost ]$ touch /home/user/Pobrane/plik-nowy
[user@localhost Muzyka]$ ./find.sh /home/user
/home/user/Pobrane
Grep czy awk niekoniecznie. Jeśli kolega potrzebuje tylko nazwę katalogu, to trzeba by użyć polecenia basename.
Ostatnia linia wówczas wyglądałaby tak:
basename $(ls -td ${1}/* | head -n 1)
Dziękuję za szybką odpowiedź. Skrypt działa idealnie, tylko zastanawiam się, jak taki sam efekt uzyskać w przypadku gdy w katalogu, który ma przeszukać skrypt znajdą się jakieś pliki. Bo nadal interesuje mnie “najmłodszy” katalog.
Gdy zastosuję skrypt w katalogu, w którym są podkatalogi i pliki, a plik będzie miał nowszą datę utworzenia/modyfikacji, to jako efekt działania skryptu otrzymam nazwę tego pliku. Chociaż użycie ls -d powinno wyświetlić tylko same katalogi, ale użycie w bieżącym katalogu powoduje wyświetlenie jako wyniku, pojedynczej kropki.
Nie wykonuj polecenia wewnatrz katalogu.
ls -d katalog
I ty możesz zostać druciarzem
find /ścieżka/* -type d -printf "%T@ %Tc %p\n" | sort -rn | awk 'NR==1{print $7}'
Na podstawie:
https://linux.die.net/man/1/find
Przykład:
[RODO@RODO ~]$ find ~/Pulpit/* -type d -printf "%T@ %Tc %p\n" | sort -rn | awk 'NR==1{print $7}'
/home/RODO/Pulpit/test3
[RODO@RODO ~]$ tree -d Pulpit
Pulpit
├── test1
├── test2
└── test3
3 directories
root@user:~# mkdir -p test test1 test2
root@user:~# touch test1/plik
root@user:~# ./find.sh .
./test1
root@user:~# cd test1
root@user:~/test1# mkdir test2
root@user:~/test1# …/find.sh .
./test2
root@user:~/test1# pwd
/root/test1
root@user:~/test1/test2# pwd
/root/test1/test2
czyli najmłodszy katalog znajduje i nic więcej nie potrzeba