Nhận đường dẫn tuyệt đối của tệp bằng lệnh 'find'


26

Có cách nào để có được đường dẫn tuyệt đối của một tập tin đang được tìm kiếm không?

Ví dụ:

find .. -name "filename"

Nó cho tôi kết quả như thế nào ../filenamenhưng tôi muốn con đường đầy đủ.

Những gì tôi cần là tìm trong thư mục mẹ và các con của nó, cho một tệp cụ thể, mà tôi sẽ sử dụng trong một tập lệnh khác sau.

Cảm ơn


Câu trả lời:


15

Hãy thử một cái gì đó như:

find "$(cd ..; pwd)" -name "filename"

Cảm ơn, tôi chỉ đang thử nghiệm $(cd ..; pwd). Ở đây nó hoạt động tốt, nhưng nếu tôi làm một mình trong Terminal, tôi không thể nhận được thư mục mẹ ... Tôi nhận được "Bash: <dir>: Là một thư mục. Và nếu tôi làm $(cd ..; echo "something")tôi nhận được" một cái gì đó: không phải là một lệnh "
JorgeeFG

Bạn có nghĩa là như một lệnh riêng biệt? Sau đó, bạn sẽ cần phải bỏ qua ký hiệu đô la:(cd ..; pwd)
Scrutinizer

Cảm ơn, đó là nó. Bất kỳ tài liệu tham khảo nào về lý do tại sao tôi nên xóa $, nó ảnh hưởng đến lớp con như thế nào?
JorgeeFG

1
( ... )có nghĩa là thực thi trong một lớp con, đầu ra được ghi vào thiết bị xuất chuẩn. $( ... )là viết tắt của "lệnh thay thế". Cái sau có thể được sử dụng như thể nó là một sự mở rộng biến.
Scrutinizer

tìm / -name "tên tệp"
Panther

12

Hãy thử sử dụng -exectùy chọn find:

find .. -name "filename" -exec readlink -f {} \;

Lưu ý: readlinkin giá trị của một liên kết tượng trưng hoặc tên tệp chính tắc.


điều này sẽ gọi readlink trên mỗi tập tin vì vậy nó sẽ rất không hiệu quả.
bac0n

9

Bạn có thể sử dụng bashMở rộng Tilde để có được đường dẫn tuyệt đối của thư mục làm việc hiện tại, cách này cũng findin đường dẫn tuyệt đối cho kết quả:

find ~+ -type f -name "filename"

Nếu được thực thi trong ~/Desktop, điều này được mở rộng thành

find /home/yourusername/Desktop -type f -name "filename"

và in kết quả như:

/home/yourusername/Desktop/filename

Nếu bạn muốn sử dụng phương pháp này với thư mục mẹ của thư mục làm việc hiện tại, bạn cần phải cdtrước khi gọi find:

cd .. && find ~+ -type f -name "filename"

7

Cách đơn giản nhất là

find "$(pwd -P)" -name "filename"

Vâng! Hoặcfind `pwd -P` -name "filename"
Apollys hỗ trợ Monica

điều này sẽ tìm thấy các tập tin trong thư mục hiện tại không phải từ cha mẹ.
bac0n

1

Cũng sử dụng PWD có thể cho bạn thấy thư mục đầy đủ. Pwd sẽ cho bạn thấy tất cả các giám đốc của bạn giống như việc mở rộng tên tệp. Hy vọng điều này sẽ giúp.


1

Điều này làm việc cho tôi, nhưng sẽ chỉ trả lại lần đầu tiên.

realpath $(find . -type f -name filename -print -quit)

Để có được đường dẫn đầy đủ cho tất cả các lần xuất hiện (theo đề xuất của Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath

Nhận xét trước đó đã bị xóa, +1, công việc tốt @Wyrmwood
Sergiy Kolodyazhnyy

1

Loại bỏ thành phần thư mục cuối cùng với mở rộng tham số .

find "${PWD%/*}" -name 'filename'

Một ví dụ về cách bạn có thể sử dụng mapfile để lưu đầu ra từ find sang mảng được lập chỉ mục để sử dụng sau.

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(nếu không có tên mảng nào được chỉ định, MAPFILE sẽ là tên mảng mặc định).

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.