Làm thế nào để liệt kê tất cả các tệp trong một cây (một thư mục và các thư mục con của nó)?


41

Đối với một nhiệm vụ của tôi, tôi cần liệt kê tất cả các tệp trong một cây (một thư mục, tất cả các thư mục con của nó, tất cả các thư mục con của chúng, v.v.).

Tôi muốn thấy chúng trong Nautilus hoặc Krusader, nhưng một giải pháp dòng lệnh cũng thú vị (trong trường hợp này tôi sẽ cần các tệp đầy đủ tên, kích cỡ và thời gian sửa đổi để được liệt kê).


Câu hỏi này có khủng khiếp rất nhiều quan điểm. Có lẽ bạn có thể chấp nhận câu trả lời mà bạn thấy hữu ích nhất, để tiết kiệm thời gian cho người khác @Ivan?
starbeamrainbowlabs

Câu trả lời:


39

cây sẽ rất thuận tiện cho bạn.

sudo apt-get install tree

sử dụng tree filepathđể liệt kê các tập tin


27
ls -alR

Đó có lẽ là phương pháp đơn giản nhất. Tôi chỉ đang hack một kịch bản tìm kiếm để giúp bạn kiểm soát nhiều hơn.


7
Hoặc chỉ ls -Rkhi bạn không muốn tất cả các chi tiết.
Matthew

11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Bạn có thể chơi với định dạng printf bao nhiêu tùy thích. Điều này mang đến cho bạn một cơ hội tuyệt vời để khiến mọi thứ được định dạng theo cách bạn cần, điều này là vô giá nếu bạn đang sử dụng đầu ra trong một ứng dụng khác.

Thêm: http://linux.about.com/od/commands/l/blcmdl1_find.htm

Để dễ đọc hơn, bạn có thể chuyển tất cả thông qua columnlệnh và nó sẽ tự động thay đổi kích thước mọi thứ để chúng xếp hàng.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t

4

Như Oli đã trả lời, findsẽ cho phép bạn tìm kiếm toàn bộ cây thư mục:

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

# Where %TY will display the mod. time year as 4 digits
#       %Tm will display the mod. time month as 2 digits
#       %Td will display the mod. time day as 2 digits
#       %s displays the file size in bytes
#       %p displays the full path name of the file

Bạn cũng có thể muốn sử dụng -type ftùy chọn để giới hạn kết quả chỉ trong các tệp. Nếu bạn muốn khớp một mẫu tệp, bạn muốn -namehoặc -inamecác tùy chọn (phân biệt chữ hoa chữ thường và chữ hoa chữ thường tương ứng). Hãy đọc findtrang của người đàn ông - có một số lượng lớn các tùy chọn mà bạn có thể sử dụng để thu hẹp / tinh chỉnh tìm kiếm của mình.

Và chỉ là một bên, nếu bạn đang mong đợi có nhiều dữ liệu được trả về cho bạn, hãy nhớ đưa ra kết quả của bạn thông qua less.

@Oli: +1 Tôi cũng vừa học được một điều mới - column. Chưa từng sử dụng nó trước đây.


3

lslà lệnh tiêu chuẩn để liệt kê các tệp trong Ubuntu và các hệ điều hành Linux và Unix khác. lsđặc biệt hữu ích để tìm hiểu bởi vì bạn sẽ thấy nó được cài đặt trên mọi hệ thống Unix bạn từng gặp. Theo mặc định, việc này chỉ hiển thị các tệp trong thư mục hiện tại.

Tuy nhiên, -R'cờ' là tùy chọn đệ quy (lưu ý viết hoa R , không phải r ) sẽ hiển thị cho bạn tất cả các thư mục con.

Bạn cũng đã hỏi "chi tiết" - vì điều này bạn muốn -lcờ (đó là chữ thường chữ L, không phải số một). Lưu ý rằng điều này cung cấp cho bạn thông tin quyền truy cập tệp cũng như kích thước tệp, thông tin thời gian / ngày và tên tệp.

Nếu bạn cũng muốn hiển thị các tệp / thư mục ẩn (tương đương Ctrl+ Htrong Nautilus) thì hãy thêm -acờ 'tất cả'.

Bạn có thể hợp nhất các cờ lại với nhau, để cung cấp cho bạn một cái gì đó như:

ls -lR

Nếu bạn chạy nó trên bất kỳ thư mục có kích thước phù hợp, bạn sẽ thấy điều này tạo ra một đầu ra dài rất lớn, cuộn xuống màn hình của bạn rất nhanh. Để giải quyết vấn đề này, bạn có thể 'dẫn' đầu ra của lsmột chương trình được gọi less(tên này là một sự nhại lại tương tự moretrước tiên nhưng có nhiều tính năng hơn).

ls -lR | less

Điều này sẽ cho phép bạn sử dụng các phím mũi tên lên / xuống, cùng với PageUp / Down để đi qua đầu ra với tốc độ dễ chịu hơn.


0

Sử dụng Krusader:

  1. Sử dụng Tìm kiếm (Ctl-S).
  2. Kiểm tra "tìm kiếm trong thư mục con".
  3. Nhấp vào "Tìm kiếm".
  4. Khi tìm kiếm kết thúc, bấm vào "Feed to listbox".

Điều này sẽ cho phép bạn xử lý toàn bộ lô bằng cách kéo sang bảng khác, v.v.


0

Làm thế nào về một kịch bản Nautilus ?

#!/bin/bash
#
# AUTHOR:       (c) 2013 Glutanimate (https://askubuntu.com/users/81372)
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
#
# DESCRIPTION:  Creates a directory tree at the current location. If you want you
#               can filter the output by a pattern (e.g. *.avi to only include avi
#               files).

TITLE=DirTree

# Get working directory
WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Filter pattern
zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?"

if [ "$?" = "1" ]
  then
      customtree="tree"
  else
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
           then
               exit
           else
               customtree="tree -P $PATTERN"               
         fi

fi

# Directory tree
$customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt"

Hướng dẫn cài đặt: Làm cách nào tôi có thể cài đặt tập lệnh Nautilus?


0

Tôi đã tạo một chương trình đặc biệt cho việc này - Ảnh chụp thư mục .
Nó lặp lại một cách đệ quy thông qua một thư mục và lưu trữ tên và kích thước của tất cả các tệp và thư mục mà nó gặp trong các tệp HTML có cấu trúc gọn gàng, có một tổ chức tương tự như thư mục đầu vào.
Nói cách khác, đây có thể được coi là một phiên bản siêu liên kết của các lệnh dir /shoặc tree /f.


Bạn đã viết dirtreevới các tùy chọn kiểu DOS, vì vậy tôi phải hỏi, liệu nó có hoạt động trên Ubuntu không?
wjandrea

Có, tôi thực sự đã lên lịch để chạy trên bản cài đặt Ubuntu của mình vào mỗi cuối tuần. Mặc dù, nó được xây dựng bằng C ++ và Boost, vì vậy sẽ hơi khó khăn để biên dịch và tạo tệp nhị phân. Đó là lý do tại sao tôi đang trong quá trình chuyển nó sang Python. Dù sao, tôi có thể cung cấp cho bạn nhị phân được biên dịch trước nếu bạn muốn.
Anmol Singh Jaggi

0

Nautilus

  1. Cho phép mở rộng các thư mục con trong chế độ xem danh sách
  2. Nhấp vào thư mục và nhấn dấu hoa thị ( *trên numpad hoặc Shift+ 8) để mở rộng một cấp thư mục con. Mỗi lần bạn nhấn dấu sao, nó sẽ mở rộng cấp độ tiếp theo.

Điều này cũng hoạt động trong Nemo.


-1

bạn có thể đặt chúng trong tệp .bashrc của bạn

function _get_tree(){ ls -alR | while read LINE; do   echo $LINE | grep ":$" > /dev/null;   if [ $? -eq 0 ];   then     VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/' | tee /dev/tty);   fi;   echo $LINE | grep "^-" > /dev/null;   if [ $? -eq 0 ];   then     size=${#VAR};     for i in $(eval echo "{1..$size}"); do echo -n ' '; done;     echo -n '..';     echo $LINE | cut -d ' ' -f9;   fi; done; };

alias get_tree='_get_tree'

Bây giờ, bạn có thể sử dụng lệnh get_tree bên trong bất kỳ thư mục nào và nó sẽ hiển thị toàn bộ hệ thống phân cấp.

Cú pháp:

$ get_tree

Đầu ra mẫu:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Hi vọng điêu nay co ich !!


Sẽ không có ích gì trừ khi bạn giải thích những gì bạn đang làm ..
Ron

-1 Định dạng mã kém, không đủ giải thích. Và tại sao bạn làm một bí danh?
wjandrea
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.