UNIX'te dosyaları klasörlere taşıma


-2

B_in00'den b_in79'a kadar çok fazla dosyam var ve bu dosyaları b_in00 ile klasör 00'a, vb. Bana rehberlik eder misiniz?

Yanıtlar:


2

Bash:

mkdir {0,1,2,3,4,5,6,7}{0,1,2,3,4,5,6,7,8,9} 80 
for i in `seq -w 0 80`; do mv b_in${i} $i; done

-w, 1'in 01 olacağı şekilde sola dolgu uygulamak anlamına gelir.

Alternatif:

mkdir {00..80}
for i in {00..80}; do mv b_in$i $i; done

Ya da

for i in {00..80}; do mkdir $i; mv b_$i $i;done

1
{00..80} kullandığınız her iki komutta da çalışacaktır.
— dset0x

00..80'i 00..80'e taşımak istemiyorum ve afaik'e 00'a sadece 00'a ve 01'e 01'e kadar hareket etmesini söylemek mümkün değildir. ... ah Sıra yerine ve mkdir {00..80} 'de demek istedin. Güzel.
— Ярослав Рахматуллин

1

Bunu yapmanın birçok yolu vardır. Şahsen ben bir kabuk betiği kullanırdım.

Kısaca şöyle görünür:

i=0
while [[ $i -le 80 ]]
do number=$(printf %02i $i)
    mkdir $number &&
    mv b_in$number $number
    i=$((i+1))
done

veya tek satırlı sürüm

i=0; while [[ $i -le 80 ]]; do number=$(printf %02i $i); mkdir $number && mv b_in $number; i=$((i+1)); done

Alternatif bir yaklaşım tüm dosyaları almak, baştaki b_in'i soyun ve kalan dizgiyi directoryname olarak kullanmaktır:

for filename in b_in*
do
    dirname=${filename#b_in}
    mkdir $dirname &&
    mv $filename $dirname
done

Yanlış giden ve bu betiği çalıştırmadan önce kontrol ettiğinizi varsaydığım şeyler:

  • Dosya adlarında boşluk veya özel karakter yok
  • Dizinler oluşturulabilir ve mevcut dosya veya dizinlerle çakışmaz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.