قائمة الملفات بشكل متكرر في لينكس CLI مع مسار نسبة إلى الدليل الحالي

StackOverflow https://stackoverflow.com/questions/245698

  •  05-07-2019
  •  | 
  •  

سؤال

وهذا هو مماثل ل<لأ href = "https://stackoverflow.com/questions/105212/linux-recursively-list-all-files-in-a-directory-including-files-in-symlink-dire" > هذا السؤال ، ولكن أريد أن تضمين المسار نسبة إلى الدليل الحالي في يونكس. إذا كنت تفعل ما يلي:

ls -LR | grep .txt

وولكنها لا تشمل مسارات الكاملة. على سبيل المثال، لدي بنية الدليل التالي:

test1/file.txt
test2/file1.txt
test2/file2.txt

ورمز أعلاه سيعود:

file.txt
file1.txt
file2.txt

وكيف يمكنني الحصول عليه لتشمل المسارات النسبية إلى الدليل الحالي باستخدام الأوامر القياسية يونكس؟

هل كانت مفيدة؟

المحلول

استخدم تجد:

find . -name \*.txt -print

في الأنظمة التي تستخدم GNU العثور عليها، مثل معظم توزيعات جنو / لينكس، يمكنك ترك خارج -print.

نصائح أخرى

استخدم tree، مع -f (المسار الكامل) و-i (لا خطوط المسافة البادئة):

tree -if --noreport .
tree -if --noreport directory/

ويمكنك بعد ذلك استخدام grep لتصفية تلك التي تريد.


إذا لم يتم العثور على الأوامر، يمكنك تثبيته:

واكتب الأمر التالي لتثبيت قيادة شجرة على RHEL / سينت أو إس وفيدورا لينكس:

# yum install tree -y

إذا كنت تستخدم ديبيان / أوبونتو، نوع النعناع لينكس الأمر التالي في الطرفية الخاص بك:

$ sudo apt-get install tree -y

وحاول find. يمكنك أن تبحث عنه بالضبط في الصفحة الرجل، ولكن هذا شيء على مثل هذا:

وfind [start directory] -name [what to find]

وذلك على سبيل المثال الخاص بك

وfind . -name "*.txt"

ويجب أن تعطيك ما تريد.

هل يمكن استخدام تجد بدلا من ذلك:

find . -name '*.txt'

وهذا لا حيلة:

وls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

ولكن من يفعل ذلك من قبل "آثم" مع إعراب ls، على الرغم من، والذي يعتبر النموذج السيئ من قبل المجتمعات GNU وغوستسكريبت.

DIR=your_path
find $DIR | sed 's:""$DIR""::'

و"الحوار الاقتصادي الاستراتيجي" سوف يمحو "your_path" من كل "العثور على 'النتائج. وأنت تستلم نسبة إلى المسار 'DIR ".

للحصول على أسماء الملفات المسار الكامل الفعلية للملفات المطلوبة باستخدام الأمر find، واستخدامها مع الأمر الأشخاص ذوي الإعاقة:

find $(pwd) -name \*.txt -print

وهنا هو السيناريو بيرل:

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if ($_ =~ /^\s+/);
        if ($_ =~ /(^\w+(\/\w*)*):/)
        {
            $tmppath = $1 if defined $1;    
            next;
        }
        print "$tmppath/$_";
    }
}

sub main()
{
        my @lines = ();

    while (<>) 
    {
        push (@lines, $_);
    }
    format_lines(\@lines);
}

main();

والاستعمال:

ls -LR | perl format_ls-LR.pl

هل يمكن إنشاء دالة قذيفة، على سبيل المثال في .zshrc أو الخاص .bashrc:

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

وسيكون أول واحد يعمل على صورة واحدة فقط، ومن الواضح.

وابحث عن ملف يسمى "اسم الملف" على الملفات الخاصة بك بدء البحث من الدليل الجذر "/". في "اسم الملف"

find / -name "filename" 

إذا كنت تريد الحفاظ على تفاصيل تأتي مع ليرة سورية مثل حجم الملف وغيرها في الإخراج الخاص بك ثم وهذا يجب أن تعمل.

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file

ويمكنك تنفيذ هذه الوظيفة مثل هذا
أولا، وذلك باستخدام الأمر ls أشار إلى الدليل المحدد لها. في وقت لاحق باستخدام الأمر find تصفية نتيجة منه. من قضيتك، فإنه يبدو وكأنه - دائما يبدأ اسم الملف مع كلمة file***.txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)

قذيفة، يمكنك القيام بذلك لسرد كافة ملفات PDF بشكل متكرر، بما في ذلك تلك الموجودة في الدليل الحالي :

$ ls **pdf

ومجرد إزالة 'الشعبي' إذا كنت تريد الملفات من أي نوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top