GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara melakukan perulangan untuk setiap semua file di bawah jalur yang ditentukan?

for -loop akan mengulangi setiap entri (dipisahkan spasi) pada string yang disediakan.

Anda sebenarnya tidak menjalankan find perintah, tetapi berikan sebagai string (yang diulangi oleh for -loop). Alih-alih tanda kutip ganda, gunakan backticks atau $() :

for line in $(find . -iname '*.txt'); do 
     echo "$line"
     ls -l "$line"
done

Selain itu, jika jalur/nama file Anda berisi spasi, metode ini gagal (karena for -loop mengulangi entri yang dipisahkan ruang). Alih-alih, lebih baik menggunakan metode yang dijelaskan dalam jawaban dogbanes.

Untuk mengklarifikasi kesalahan Anda:

Seperti yang dikatakan, for line in "find . -iname '*.txt'"; mengulangi semua entri yang dipisahkan ruang, yaitu:

  • temukan
  • .
  • -iname
  • '*.txt' (menurut saya...)

Dua yang pertama tidak menghasilkan kesalahan (selain perilaku yang tidak diinginkan), tetapi yang ketiga bermasalah saat dijalankan:

ls -l -iname

Banyak perintah (bash) yang dapat menggabungkan opsi karakter tunggal, jadi -iname sama dengan -i -n -a -m -e . Dan voila:invalid option -- 'e' Anda kesalahan!


Berikut adalah cara yang lebih baik untuk mengulang file karena menangani spasi dan baris baru dalam nama file:

#!/bin/bash

find . -type f -iname "*.txt" -print0 | while IFS= read -r -d $'\0' line; do
    echo "$line"
    ls -l "$line"    
done

Gunakan substitusi perintah alih-alih tanda kutip untuk menjalankan find alih-alih meneruskan perintah sebagai string:

for line in $(find . -iname '*.txt'); do 
     echo $line
     ls -l $line; 
done

Versi yang lebih ringkas bekerja dengan spasi dan baris baru dalam nama file:

find . -iname '*.txt' -exec sh -c 'echo "{}" ; ls -l "{}"' \;

Linux
  1. Cara memeriksa file besar di konsol

  2. Bagaimana Mengganti Satu Char Dengan Yang Lain Di Semua Nama File Direktori Saat Ini?

  3. Bagaimana Menemukan Semua File Yang Berhubungan Dengan Perangkat Lunak?

  1. Bagaimana menemukan semua file yang jarang di Linux

  2. Bagaimana cara menemukan lokasi yang dapat dieksekusi di C?

  3. Cara mendapatkan semua file yang melebihi ukuran tertentu dan menghapusnya

  1. Bagaimana Melewati Garis File?

  2. Cara Menggunakan Perintah find Linux untuk Menemukan File

  3. Bagaimana saya bisa mengedit semua file yang dikembalikan oleh find in vi di Linux?