Jak uzyskać bezwzględną ścieżkę przy użyciu polecenia find unix

11

Jak uzyskać bezwzględną ścieżkę za pomocą polecenia find.
właściwie uruchamiam następujący skrypt: -

find . -size +20M | while read a
do
     i=$(echo $a | sed 's:/: :g')
     echo $a;
     j=($i)
     fileName=${j[${#j[@]}-1]}
     userName=${j[${#j[@]}-3]}
done

ale tutaj zmienna $apokazuje ścieżkę zaczynającą się od, ./Downloads/filenameale chcę ścieżkę bezwzględną /.

Shivam Sharma
źródło

Odpowiedzi:

16

Użyj find z absolutną ścieżką.

find /path/ -size +20M

Wydrukuje całą ścieżkę.
Jeśli nie znasz katalogu roboczego, skorzystaj z podstawiania poleceń w pwdtaki sposób:

find "`pwd`" -size +20M 
   #or like this:
find "$(pwd)" -size +20M

Aby uzyskać katalog roboczy

W każdym razie wydaje się, że człowiek Bash teraz radzę używać $()ponad ``więc należy użyć drugiego formularza. Prawdopodobnie możesz również odwołać się bezpośrednio do $PWDzmiennej zawierającej katalog roboczy skryptu i prawdopodobnie byłoby to szybsze, gdybyś musiał użyć w pętli.

find "$PWD" -size +20M
Kiwy
źródło
Ale nie mam ścieżki, mam tylko. jako bieżący katalog?
Shivam Sharma
2
Nie zaczynaj od ., użyj $(pwd)zamiast tego, co da ci pełną ścieżkę.
bsd
8

Możesz użyć pwdpolecenia lub wydrukować plik realpath:

$ find "$(pwd)" -size +20M
$ find . -size +20M -exec realpath {} +

Oba polecenia naprawdę dają absolutną ścieżkę do plików.

Spack
źródło
Ale drugi podaje find: `realpath ': Nie ma takiego pliku ani katalogu
Shivam Sharma
Szum. Być może nie masz go zainstalowanego, chociaż zapewnia go coreutilspakiet. Spróbuj go zlokalizować which realpath.
Spack
Nic nie lokalizuje ...
Shivam Sharma
Z jakiego systemu korzystasz?
Spack
Linux BANE 3.7-trunk-amd64 # 1 SMP Debian 3.7.2-0 + kali8 x86_64 GNU / Linux
Shivam Sharma
0

Aby wyświetlić listę wszystkich plików PNG i JPEG, które mają 7 dni z bezwzględną ścieżką.

$ find $PWD/ -mtime -7 -print -exec grep -e ".png\|.jpg" {} \;

Tutaj $PWDzostanie dodany do każdego dopasowanego pliku.

aty
źródło