Điểm:2

Làm cách nào để tạo danh sách các thư mục con trong một thư mục nhất định mà không có đường dẫn đầy đủ?

lá cờ gb

Sau đây trong một tập lệnh bash:

tìm /Volumes/SpeedyG -type d >> file.txt

... hoạt động tốt để liệt kê các thư mục trong đường dẫn đó trong một tệp văn bản,

/Tập/SpeedyG/thư mục1  
/Tập/SpeedyG/thư mục2  
/Tập/SpeedyG/thư mục2

nhưng kết quả là đường dẫn đầy đủ đến thư mục.

Nếu tôi chỉ muốn tên thư mục mà không có đường dẫn đầy đủ thì sao?


thư mục1  
thư mục2  
thư mục3  
Điểm:6
lá cờ hr

Đối với việc triển khai GNU của tìm thấy, bạn có thể làm điều này bằng cách sử dụng tác vụ đầu ra được định dạng bản inf:

          %P Tên tệp với tên của điểm bắt đầu bên dưới
                 mà nó đã được tìm thấy loại bỏ.

Cho nên

tìm /Volumes/SpeedyG -type d -printf '%P\n' >> file.txt

Nếu bạn muốn loại bỏ tất cả các các thành phần thư mục hàng đầu, bạn có thể sử dụng %f thay vì %P. Nếu bạn có zsh, bạn có thể thực hiện tương tự bằng cách sử dụng shell toàn cầu đệ quy và :t (đuôi) hạn định:

in -rC1 /Volumes/SpeedyG/**/*(ND/:t)

trong trường hợp đó bạn không cần tìm thấy ở tất cả. Với bất kỳ POSIX nào sh, bạn luôn có thể làm

tìm dir -type d -exec sh -c '
  for f do printf "%s\n" "${f##*/}"; xong
' tìm-sh {} +
lá cờ gb
Tôi phải có một vấn đề cú pháp. Nếu tôi chạy cái này từ thiết bị đầu cuối mac của mình, tôi nhận được `find: -printf: sơ cấp hoặc toán tử không xác định` Có lẽ nó khác trong OSX so với trong Ubuntu.
ojdo avatar
lá cờ co
@JonGriffith: vâng, đây có vẻ là trường hợp: https://superuser.com/a/293200/238733 và đây là câu trả lời cập nhật hơn (2020 thay vì 2011): https://stackoverflow.com /a/61158594/2375855
lá cờ cn
@JonGriffith Nếu bạn đang tìm kiếm câu trả lời cho OSX thay vì Ubuntu, [Unix SE](https://unix.stackexchange.com/) là một nơi tốt hơn để hỏi. [Superuser SE](https://superuser.com/) cũng có thể hoạt động.
Điểm:0
lá cờ cn

cây -di /Tập/SpeedyG sẽ cung cấp cho bạn một danh sách chỉ các thư mục con.

cây -dia /Tập/SpeedyG sẽ cung cấp cho bạn một danh sách chỉ các thư mục con bao gồm các thư mục ẩn.

cây -diL 1 /Tập/SpeedyG sẽ cung cấp cho bạn một danh sách chỉ các thư mục con cấp 1.

lưu ý: nếu một thư mục là một liên kết tượng trưng đến một thư mục khác, thì dòng đầu ra đó sẽ hiển thị liên kết và đường dẫn đến thư mục đích ...
Bạn có thể loại bỏ nó bằng câu lệnh grep như cây -di /Volume/SpeedyG | grep -v "\->"

lá cờ gb
Tôi thích một kết quả cắt bớt đường dẫn đầu để tôi chỉ lấy mọi thứ ở bên phải của SpeedyG/
WU-TANG avatar
lá cờ cn
@JonGriffith Để rõ ràng, điều bạn đang nói là, nếu bạn đã thực hiện `tree -di /Volumes/SpeedyG > sampletext.txt`... Và bạn nhìn vào sampletext.txt, điều duy nhất không mong muốn trong tệp, là dòng đầu tiên trong đó ... đúng không?
lá cờ gb
Không. Mỗi dòng trong tệp txt đề cập đến đường dẫn đầy đủ của các tệp đã được thêm vào txt, tức là /Volumes/SpeedyG/folder1. Tôi muốn danh sách kết quả được cắt bớt để chỉ hiển thị danh sách tất cả các thư mục được tìm thấy ở cấp độ này, vì vậy danh sách sẽ là "thư mục1, thư mục2, thư mục3", v.v.
WU-TANG avatar
lá cờ cn
@JonGriffith ... Tôi không có kết quả giống như bạn đang thấy..tất cả những gì tôi thấy là một tên thư mục con trên mỗi dòng... Thực tế là, nếu tôi muốn xem đường dẫn đầy đủ, tôi sẽ phải thực hiện `tree -fdi /Volumes/SpeedyG` để thay thế... Nhưng bây giờ bạn đã đề cập đến " ở cấp độ này", tôi sẽ chỉnh sửa cho bất kỳ ai khác thấy điều đó hữu ích. Không biết phải nói gì về lý do tại sao bạn đang nhìn thấy những gì bạn đang nhìn thấy.
Điểm:0
lá cờ mx

GNU tên cơ sở xóa mọi thành phần thư mục hàng đầu khỏi tên đường dẫn đầy đủ.

$ tên cơ sở/Tập/SpeedyG/thư mục1
thư mục1

Để xử lý nhiều tên đường dẫn, hãy sử dụng --nhiều Tùy chọn:

â-aâ
â--nhiềuâ
     Hỗ trợ nhiều hơn một đối số. Coi mọi đối số là TÊN.
     Với điều này, một HẬU THẤT tùy chọn phải được chỉ định bằng cách sử dụng â-sâ
     Tùy chọn.

$ tên cơ sở -a /Tập/SpeedyG/thư mục1 /Tập/SpeedyG/thư mục2 /Tập/SpeedyG/thư mục3
thư mục1
thư mục2
thư mục3

Trong một tập lệnh, một cách hiệu quả hơn để loại bỏ tiền tố lớn nhất là sử dụng cách mở rộng tham số như sau:

tệp = "/Tập/SpeedyG/thư mục1"
tệp="${file##/*/}"

Bạn có thể sử dụng điều này trong một vòng:

cho tôi trong /Volumes/SpeedyG/*
làm
    printf "%s\n" "${i##/*/}"
xong > $HOME/files.txt

$ con mèo ~/files.txt
thư mục1
thư mục2
thư mục3

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.