แสดงรายการไฟล์ทั้งหมดซ้ำในไดเรกทอรีรวมถึงไฟล์ในไดเรกทอรี symlink


147

สมมติว่าฉันมีไดเรกทอรี/dirภายในซึ่งมี 3 symlinks ไปยังไดเรกทอรีอื่น ๆ /dir/dir11, และ/dir/dir12 /dir/dir13ฉันต้องการที่จะแสดงรายการไฟล์ทั้งหมดในdirรวมทั้งคนในdir11, และdir12dir13

เพื่อให้เป็นเรื่องทั่วไปฉันต้องการแสดงรายการไฟล์ทั้งหมดรวมถึงไฟล์ในไดเรกทอรีที่มี symlink find ., ls -Rฯลฯ หยุดที่ symlink โดยไม่ต้องไปที่พวกเขาเพื่อแสดงรายการเพิ่มเติม


คำตอบ:


232

-Lตัวเลือกในการlsจะประสบความสำเร็จในสิ่งที่คุณต้องการ มันเป็นลิงค์สัญลักษณ์

ดังนั้นคำสั่งของคุณจะเป็น:

ls -LR

คุณสามารถทำสิ่งนี้ได้ด้วย

find -follow

-followตัวเลือกชี้นำหาที่จะปฏิบัติตามการเชื่อมโยงสัญลักษณ์ไปยังไดเรกทอรี

บน Mac OS X ใช้

find -L

ตามที่-followได้เลิกใช้แล้ว


14
- ผู้ติดตามถูกคัดค้าน - L ในการค้นหาเวอร์ชันที่ใหม่กว่า
pjz

@pjz: มีการอ้างอิงโยงสำหรับ '- เลิกตาม; ใช้ -L 'หรือไม่ ค่อนข้างแปลกใจของฉันฉันพบ '-L' และ '-H' อยู่ในมาตรฐาน POSIX / SUS ที่opengroup.org/onlinepubs/009695399/toc.htmและยิ่งแปลกใจที่ฉันไม่มี '-follow' ดังนั้นฉันจึงตอบคำถามของตัวเอง
Jonathan Leffler

สิ่งนี้ไม่ได้ผลสำหรับฉัน ก่อนอื่นไม่มีอะไรเกิดขึ้นแล้วฉันพยายามด้วย-follow- และมันบอกว่ามันไม่เจอโฟลเดอร์ollow
smatthewenglish

4
บน OS X 10.10 งานนี้: find -L .- ผมมีปัญหาเช่นเดียวกับ @ S.Matthew_English
fregante

คำตอบของคุณเป็นสิ่งที่ดี แต่ฉันต้องการfollowเพียงเส้นทางของไฟล์ (เส้นทางแบบเต็มไปยังไฟล์) และไม่ใช่เส้นทางไดเรกทอรีฉันจะทำอย่างไร
Vicky Dev

116

วิธีการเกี่ยวกับต้นไม้ ? tree -lจะทำตาม symlink

คำเตือน : ฉันเขียนแพคเกจนี้


2
วิธีการเกี่ยวกับแพคเกจส่วนโค้ง?
Mr_and_Mrs_D

lsนี่คือมุมมองที่ใช้งานง่ายกว่า มันยังวางได้ง่ายกว่า
dhaupin

46
find /dir -type f -follow -print

-type f หมายความว่ามันจะแสดงไฟล์จริง (ไม่ใช่ symlink)

-follow หมายความว่ามันจะทำตามลิงก์ไดเรกทอรีของคุณ

-print จะทำให้มันแสดงชื่อไฟล์

หากคุณต้องการจอแสดงผลประเภท ls คุณสามารถทำสิ่งต่อไปนี้

find /dir -type f -follow -print|xargs ls -l

สิ่งนี้สร้างการแสดงผลที่สวยงามกว่าls -Lตัวเลือก
eusoubrasileiro

10

ใช้ ls:

  ls -LR

จาก 'man ls':

   -L, --dereference
          when showing file information for a symbolic link, show informa‐
          tion  for  the file the link references rather than for the link
          itself

หรือใช้ find:

find -L .

จาก manpage ค้นหา:

-L     Follow symbolic links.

หากคุณพบว่าคุณต้องการติดตามลิงก์สัญลักษณ์เพียงไม่กี่ลิงก์ (เช่นลิงก์ระดับบนที่คุณกล่าวถึง) คุณควรดูที่ตัวเลือก -H ซึ่งตามลิงก์ที่คุณส่งไปที่ commandline


5

ฉันรู้ว่าtreeมันเหมาะสม แต่ฉันไม่ได้ติดตั้งต้นไม้ ดังนั้นฉันได้ใกล้เคียงกับที่นี่

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'

นี่คือสิ่งที่ฉันต้องการ ขอบคุณ.
Scott C

5
find -L /var/www/ -type l

# man find
-L     Follow  symbolic links.  When find examines or prints information about files, the information used shall be taken from the

คุณสมบัติของไฟล์ที่ลิงก์ชี้ไม่ใช่จากลิงก์เอง (ยกเว้นว่าเป็นลิงก์สัญลักษณ์ที่ใช้งานไม่ได้หรือค้นหาไม่สามารถตรวจสอบไฟล์ที่ลิงก์ชี้ไป) การใช้ตัวเลือกนี้แสดงถึง -noleaf หากคุณใช้ตัวเลือก -P ในภายหลัง -noleaf จะยังคงมีผล หาก -L มีผลบังคับใช้และค้นหาค้นพบลิงก์สัญลักษณ์ไปยังไดเร็กทอรีย่อยระหว่างการค้นหาไดเร็กทอรีย่อยที่ชี้โดยลิงก์สัญลักษณ์จะถูกค้นหา


2
ls -R -L

-Lลิงก์สัญลักษณ์ สิ่งนี้จะทำให้เป็นไปไม่ได้ที่จะเห็นสัญลักษณ์เชื่อมโยงใด ๆ กับไฟล์ - มันจะดูเหมือนไฟล์ชี้ไปที่


-1

ในกรณีที่คุณต้องการพิมพ์เนื้อหาไฟล์ทั้งหมด: find . -type f -exec cat {} +

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.