GNU/Linux >> Belajar Linux >  >> Linux

Jalankan Perintah Pada Rentang Direktori yang Ditentukan?

Apakah mungkin untuk 'mempartisi' daftar direktori – misalnya ke blok dari beberapa nomor, untuk melakukan tindakan yang berbeda pada setiap 'rentang'?

Sebagai contoh, katakanlah saya memiliki direktori berikut di dalam folder lain:

$ ls test
abc/
def/
hij/
klm/
nop/
qrs/
tuv/
wxy/
zzz/

Dan saya ingin melakukan beberapa tindakan pada 3 direktori pertama, yang lain pada 3 direktori kedua, dan seterusnya.

Pikiran saya adalah bahwa mungkin loop melintasi angka akan berhasil, berdasarkan output dari sesuatu seperti ls | nl (tetapi sebelum ada yang menyebutkannya, saya tahu mengurai ls adalah tidak-tidak!)

Ini jelas tidak berhasil, tetapi menggambarkan maksud saya, saya harap:

for dir in `ls | nl`; 
do
    do-something-with ${dir{1..3}} # Where $dir has taken on some numerical value linked to the folder)
    do-something-with ${dir{4..6}} 
# And so on...
    do-something-with ${dir{n-3..n}} 
done

Folder yang saya maksud untuk benar-benar melakukan ini, dapat dikerjakan dalam urutan apa pun (yaitu pemisahan akhir dapat sepenuhnya berubah-ubah), tetapi mereka tidak memiliki konsistensi penamaan yang logis - yang saya maksud adalah folder tersebut tidak dapat diatur secara alfabetis atau numerik. berdasarkan tombol apa saja dalam nama direktori itu sendiri.

Jawaban yang Diterima:

Tidak ada alasan untuk melakukan salah satu dari kesalahan berikut ini untuk situasi ini:

  1. Gunakan ekstensi GNU non-portabel (seperti xargs -0 )
  2. Mengurai nama file sebagai aliran teks saja, berpura-pura tidak dapat berisi baris baru.

Anda dapat menangani ini dengan mudah tanpa banyak kesulitan sama sekali:

set -- */
while [ "$#" -gt 0 ]; do
  case "$#" in
    1)
      my-command "$1"
      shift 1
      ;;
    2)
      my-command "$1" "$2"
      shift 2
      ;;
    *)
      my-command "$1" "$2" "$3"
      shift 3
      ;;
  esac
done

Sungguh ini lebih bertele-tele daripada yang diperlukan, tetapi dapat dibaca dengan cara ini.

Untuk jenis partisi yang berbeda, di mana Anda ingin membagi semua direktori menjadi tepat tiga metode penanganan yang berbeda (tetapi tidak perlu menanganinya secara bersamaan), Anda dapat melakukannya seperti ini:

x=1
for d in *; do
  [ ! -d "$d" ] && continue
  case "$x" in
    1)
      # do stuff with "$d"
      ;;
    2)
      # do stuff with "$d"
      ;;
    3)
      # do stuff with "$d"
      ;;
  esac
  x=$(($x+1))
  [ "$x" -eq 4 ] && x=1
done

Linux
  1. Jalankan Perintah Tertentu Dalam Direktori yang Diberikan Tanpa Melakukan Cd'ing Untuk Itu?

  2. matlab mengeksekusi skrip dari baris perintah linux

  3. cp hanya file, melewatkan direktori

  1. Salin file &direktori di Linux

  2. Jalankan Perintah Di Terminal Aktif Jarak Jauh?

  3. Jalankan Perintah Nohup Dengan Input?

  1. Jalankan Perintah Di Mana File Ditemukan?

  2. Panduan untuk Perintah "Temukan" Linux

  3. linux mengeksekusi perintah dari jarak jauh