আমি কীভাবে পুনরাবৃত্তভাবে সাব-ডিরেক্টরিগুলি তালিকাভুক্ত করতে পারি?


48

সুস্পষ্ট

ls -dR

কাজ করে না.

আমি বর্তমানে ব্যবহার করছি

find /path/ -type d -ls

তবে আউটপুট আমার যা প্রয়োজন তা নয় (সাব-ফোল্ডারগুলির সরল তালিকা)

কোন উপায় আছে?


রঙিন সহ একটি ডিরেক্টরি ট্রি মুদ্রণের জন্য এখানে একটি দুর্দান্ত বাশ স্ক্রিপ্ট রয়েছে: mama.indstate.edu/users/ice/bash/btree ইনস্টল করা সহজ, কোনও রুট অ্যাক্সেসের প্রয়োজন নেই।
এপ

1
আসল প্রশ্নটি হওয়া উচিত: কেন ls -dRকাজ করে না?
মাস্টব্লাস্টা

আসল প্রশ্নের মধ্যে "কাজের" একটি বিবরণ অন্তর্ভুক্ত করা উচিত, যাতে আমরা উত্তর দিতে পারি কেন ls -dR"কাজ করে না"। ls -dRডকুমেন্টেশন যা বলে তা বাস্তবে করে: "-d ডিরেক্টরিগুলি সরল ফাইল হিসাবে তালিকাভুক্ত করা হয় (পুনরাবৃত্তভাবে অনুসন্ধান করা হয় না)"। ls -Rঅন্যদিকে আছে তালিকা সাবডিরেক্টরি যাও recursively।
LarsH

উত্তর:


64

ধরে নিচ্ছি আপনি কেবল প্রতিটি ডিরেক্টরিটির নাম চান:

find /path/ -type d -print

9
+1 টি। বিটিডাব্লু, '-প্রিন্ট' আরগটি alচ্ছিক - এটি ডিফল্ট। এছাড়াও যদি কোনও নির্দিষ্ট তালিকা বিন্যাসের প্রয়োজন হয় তবে এটি কোনও পছন্দসই বিকল্পগুলির সাথে এলএস চালানোর জন্য xargs এ খাওয়ানো যেতে পারে, যেমন find /path/ -type d -print0 | xargs -0 -r ls -ld। NULL টার্মিনেটেড আউটপুট, এবং ম্যাচিং -0 xargs আরগের জন্য -প্রিন্ট 0 নোট করুন।
ক্যাস

এবং যদি আপনি সুযোগক্রমে উইন্ডোজ এবং সাইগউইনে এটি চালাচ্ছেন তবে উইন্ডোজটির ইতিমধ্যে একটি findকমান্ড রয়েছে, সুতরাং আপনার সম্ভবত সাইগউইনের বিন ফোল্ডারের পথ নির্দিষ্ট করা উচিত।
ফায়াত

12

আমি অতীতেও একই জিনিসটির সন্ধান করছিলাম এবং এটি পেয়েছিলাম:

tree.sh

#!/bin/sh
#######################################################
#  UNIX TREE                                                            
#  Version: 2.3                                       
#  File: ~/apps/tree/tree.sh                          
#                                                     
#  Displays Structure of Directory Hierarchy          
#  -------------------------------------------------  
#  This tiny script uses "ls", "grep", and "sed"      
#  in a single command to show the nesting of         
#  sub-directories.  The setup command for PATH       
#  works with the Bash shell (the Mac OS X default).  
#                                                     
#  Setup:                                             
#     $ cd ~/apps/tree                                
#     $ chmod u+x tree.sh                             
#     $ ln -s ~/apps/tree/tree.sh ~/bin/tree          
#     $ echo "PATH=~/bin:\${PATH}" >> ~/.profile      
#                                                     
#  Usage:                                             
#     $ tree [directory]                              
#                                                     
#  Examples:                                          
#     $ tree                                          
#     $ tree /etc/opt                                 
#     $ tree ..                                       
#                                                     
#  Public Domain Software -- Free to Use as You Like  
#  http://www.centerkey.com/tree  -  By Dem Pilafian  
#######################################################

echo
if [ "$1" != "" ]  #if parameter exists, use as base folder
   then cd "$1"
   fi
pwd
ls -R | grep ":$" |   \
   sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
# 1st sed: remove colons
# 2nd sed: replace higher level folder names with dashes
# 3rd sed: indent graph three spaces
# 4th sed: replace first dash with a vertical bar
if [ `ls -F -1 | grep "/" | wc -l` = 0 ]   # check if no folders
   then echo "   -> no sub-directories"
   fi
echo
exit

আমি ফাইলগুলির তালিকাভুক্ত একটি চাই এবং আমি সেড সম্পর্কে শিখেছি এবং এটি লিখেছিলাম:

fulltree.sh

#!/bin/sh
#############################################
# Script that displays a recursive formatted folder and file listing
# @author Corbin
# @site iamcorbin.net
#Folder Seperator
BREAK='-------------------------------------------------------------------------------------'

#Optional: if a folder is passed as an argument, run fulltree on that folder rather than the current folder
if [ "$1" != "" ]
   then cd "$1"
   fi
pwd

## Recursive Directory Listing with files
 # 1- preserve directories from being removed in 2 & 3
 # 2- strip first 4 columns
 # 3- strip size and date
 # 4- prepend '  -- ' on each line
 # 5- remove '  -- ' from directories
 # 6- remove extra lines
 # 7- Insert a line break after directories
 # 8- Put a | at the beginning of all lines
 # 9- Indent and process 1st level sub dirs
 #10- Indent and process 2nd level sub dirs
ls -Rhl | sed \
    -e 's/^\.\//x x x x 00:00 |-/' \
    -e 's/^\([^\ ]*.\)\{4\}//' \
    -e 's/.*[0-9]\{2\}:[0-9]\{2\}//' \
    -e 's/^/  -- /' \
    -e 's/\ \ --\ \ |-//'  \
    -e '/--\ $/ d' \
    -e '/^[^ ]/ i\'$BREAK \
    -e 's/^/| /' \
| sed -e '/[^/]*\//,/'$BREAK'/ s/^|/\t&/' -e '/^\t/,/'$BREAK'/ s/'$BREAK'/\t&/' -e 's/[^/]*\//\t\| /' \
| sed -e '/[^/]*\//,/'$BREAK'/ s/^\t|/\t&/' -e '/^\t\t/,/'$BREAK'/  s/'$BREAK'/\t&/' -e 's/[^/]*\//\t\t\| /' \
| sed -e '/[^/]*\//,/'$BREAK'/ s/^\t\t/\t&/' -e 's/[^/]*\//\t\t\t\| /'
echo $BREAK

ls -R | grep "^[.]/" | sed -e "s/:$//" -e "s/[^/]*[/]/--/g" -e "s/^/ |/"ট্রি.এক্স-এর একটি আপডেট আমি কয়েকটি প্রান্তের মামলাগুলি পরিচালনা করতে পেরেছি , সর্বশেষতম: Centerkey.com/tree
ডেম পিলাফিয়ান

9

আপনি "ট্রি" প্যাকেজটি পেতে পারেন, উভয়ই আর্কলিনাক্স এবং উবুন্টুকে "গাছ" বলা হয়

যাতে আপনি যদি ~ / এ থাকেন তবে আপনি tree -dand / এ যা আছে তার জন্য একটি সম্পূর্ণ ডিরেক্টরি তালিকা (একটি গাছের কাঠামোর মধ্যে) পেতে এবং পেতে পারেন


আমার সরল পাঠ্য প্রয়োজন, সাব-ডিরেক্টরিগুলির পৃথক নতুন রেখার তালিকা, যখন গাছটিকে তার "ট্রি" কাঠামো যুক্ত করা হবে বলে মনে হচ্ছে। এবং এটি নিষ্ক্রিয় করার জন্য আমি কোনও পতাকা খুঁজে পাচ্ছি বলে মনে হচ্ছে না।
নিমো

2
@ ক্যাপ্টেন.নেমো: একটি সরল তালিকার জন্য, ব্যবহার করুন: tree -dfi ... আপনি মোট ডিরেক্টরি গণনার--noreport চূড়ান্ত প্রদর্শন দমন করতে যোগ করতে পারেন ।
পিটার.ও

3

ওপি কী আউটপুট চায় সেগুলি নির্দিষ্ট করে না ("সাব-ফোল্ডারগুলির সাধারণ তালিকা" এর বাইরে)।

[ 15:53. root@prod-2 /var]% ls -lDR | grep ':$' | head
 .:
 ./account:
 ./cache:
 ./cache/coolkey:
 ./cache/fontconfig:
 ./cache/logwatch:
 ./cache/man:
 ./cache/man/X11R6:
 ./cache/man/X11R6/cat1:
 ./cache/man/X11R6/cat2:...

বৈকল্পিকভাবে চিহ্ন অপসারণ :সঙ্গে |sed -e 's/:$//'বা সঙ্গে এটি ফরম্যাট |awk '{printf("%-92s \n",$0)}'ইত্যাদি



0

ব্যাশের জন্য:

shopt -s globstar nullglob dotglob
echo /path/**/*/

সর্বশেষ স্ল্যাশ / তালিকা কেবল ডিরেক্টরি।

বিকল্প globstarসক্রিয় **
বিকল্প nullglobকোনও * কে মেলে এমন * সরিয়ে দেয়। বিন্দু (লুকানো ফাইল) দিয়ে শুরু হওয়া ফাইলগুলি অন্তর্ভুক্ত করার
বিকল্পdotglob

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.