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.