2009-02-01 10 views
23

नि: शुल्क बीएसडी पर टीसीएसएच खोल का उपयोग करना, फ़ाइल के मालिक, समूह और सापेक्ष पथ समेत सभी फ़ाइलों और निर्देशिकाओं को दोबारा सूचीबद्ध करने का एक तरीका है?सभी फ़ाइलों और निर्देशिकाओं को दोबारा सूचीबद्ध करने के लिए कैसे करें

ls -alR करीब आता है, लेकिन यह हर फ़ाइल के सामने रिश्तेदार पथ प्रदर्शित नहीं करता है, यह एक यानी समूहीकरण

owner% ls -alR 
total 0 
drwxr-xr-x 3 owner group 102 Feb 1 10:50 . 
drwx------+ 27 owner group 918 Feb 1 10:49 .. 
drwxr-xr-x 5 owner group 170 Feb 1 10:50 subfolder 

./subfolder: 
total 16 
drwxr-xr-x 5 owner group 170 Feb 1 10:50 . 
drwxr-xr-x 3 owner group 102 Feb 1 10:50 .. 
-rw-r--r-- 1 owner group  0 Feb 1 10:50 file1 
-rw-r--r-- 1 owner group  0 Feb 1 10:50 file2 

के शीर्ष पर पथ से पता चलता क्या मैं चाहूँगा उत्पादन की तरह है:

owner group ./relative/path/to/file 

accepted answer to this question एक फ़ाइल के सापेक्ष पथ दिखाता है, लेकिन मालिक और समूह नहीं दिखाती है।

उत्तर

24

इस बारे में कैसे:

find . -exec ls -dl \{\} \; | awk '{print $3, $4, $9}' 
+0

ऐसा लगता है कि पथ में कोई स्थान होने पर यह असफल हो जाता है क्योंकि अजीब एक और क्षेत्र बनायेगा। लाइन के अंत तक 9 डॉलर से प्रिंट करने का कोई तरीका है? – Ben

+0

ठीक है आप! आप * एक समारोह में एलएस आउटपुट पढ़ सकते हैं, तर्कों के बावजूद अपना रास्ता बदल सकते हैं और "बाकी पंक्ति" पढ़ने के लिए $ @ का उपयोग कर सकते हैं, लेकिन ईमानदारी से, यह काफी गड़बड़ हो रहा है कि मैं थोड़ा पाइथन उपयोगिता लिखूंगा और इसे सही तरीके से करें .. –

+0

या स्लिम या क्रिस द्वारा सुझाए गए पर्ल समाधानों में से एक आज़माएं। –

10

find करीब आता है:

find . -printf "%u %g %p\n" 

भी "% पी" है, जो फ़ाइल नाम से उपसर्ग निकाल देता है, यदि आप पथ रिश्तेदार होना चाहता हूँ नहीं है निर्दिष्ट निर्देशिका में।

ध्यान दें कि यह जीएनयू ढूंढता है, मुझे नहीं पता कि बीएसडी ढूंढने का भी समर्थन करता है -प्रिंटफ।

+1

बीएसडी वास्तव में समर्थन नहीं करता है -प्रिंटफ, लेकिन जीएनयू को ~/bin/gnufind में ढूंढना बहुत आसान है;) –

-4

एक शैल स्क्रिप्ट का उपयोग करें। या एक पर्ल स्क्रिप्ट। उदाहरण पर्ल स्क्रिप्ट (क्योंकि यह आसान है मुझे करने के लिए):

#!/usr/bin/perl 
use strict; 
use warnings; 
foreach(`find . -name \*`) { 
    chomp; 
    my $ls = `ls -l $_`; 
    # an incomprehensible string of characters because it's Perl 
    my($owner, $group) = /\S+\s+\S+\s+(\S+)\s+(\S)+/; 
    printf("%-10s %-10s %s\n", $owner, $group, $_); 
} 

शायद थोड़ा और अन्य उत्तर की तुलना में अत्यधिक शब्द है, लेकिन चाल करना चाहिए, और आप क्या टाइप करने के लिए याद करने के लिए बचाने के लिए करना चाहिए। (कोड अवांछित।)

+0

ऐसा लगता है कि ओपी एक उत्तर चाहता था "[यू] नि: शुल्क बीएसडी पर टीसीएसएच खोल गाएं"। –

4

यदि आप पर्ल का उपयोग करने की कल्पना करते हैं तो इसे खोल कमांड के चारों ओर एक रैपर के रूप में उपयोग न करें। देशी पर्ल में इसे करने से तेज़, अधिक पोर्टेबल और अधिक लचीला होता है। इसके अलावा यह विज्ञापन-प्रसार regexes से बचाता है।

use File::Find; 
use File::stat; 

find (\&myList, "."); 

sub myList { 
    my $st = lstat($_) or die "No $file: $!"; 

    print getgrnam($st->gid), " ", 
      getpwuid($st->uid), " ", 
      $File::Find::name, "\n"; 
} 
18

उपयोग पेड़। कुछ लिनक्स वितरण डिफ़ॉल्ट रूप से इसे स्थापित करते हैं (इन अंधेरे दिनों में केवल जीयूआई :-) के, लेकिन यह हमेशा मानक भंडारों में उपलब्ध है। यह * के लिए उपलब्ध होना चाहिए बीएसडी भी देख http://mama.indstate.edu/users/ice/tree/

उपयोग:

tree -p -u -g -f -i 

या

tree -p -u -g -f 

या कई अन्य उपयोगी तर्क के लिए आदमी पृष्ठ की जाँच करें।

6

आप पहले से ही एक जवाब है कि काम करता है, लेकिन संदर्भ के लिए आप BSDs पर यह करने के लिए सक्षम होना चाहिए मिल गया है (मैं इस पर एक मैक परीक्षण किया है):

लिनक्स डेबियन में
find . -ls 
14

काम करता है:

find $PWD -type f  
+0

मैक ओएस एक्स माउंटेन शेर पर भी बेकार ढंग से काम करता है। धन्यवाद। – Norris

+1

यदि आपके वर्तमान निर्देशिका पथ में रिक्त स्थान हैं, तो डबल कोट्स के साथ '$ PWD' को घेरे रखें: '$" PWD "-type f' –

+0

बस मामले में, यह विंडोज के लिए गिटहब से गिट बैश पर भी काम करता है। –