2016-03-28 22 views
1

Dizinlerimde içerik adında birden çok dosya var. Üst dizinin tam adını kullanarak onları yeniden adlandırmam, dışarı taşı ve üst dizini silmem gerekiyor.Birden Çok Dizindeki Dosyaları Ana Dizin Adının Adına Yeniden Adlandır

Zor olan bölüm ana dizin adı biçimleri a.txt, b.pdf, c.mp3'tür, böylece dosya içeriğinin yeniden adlandırılması gerekir content.txt, content.pdf, content.mp3 sonradan dışa ve dizine taşındı silinmelidir.

ex; 
INPUT 

a.txt/content 
b.pdf/content 
c.mp3/content 

OUTPUT 

a.txt 
b.pdf 
c.mp3 

Bunu bulmak komutu kullanılır ve nerede oradan gitmek emin değilim istenen yankı çıkışını verir.

find . -type d -not -empty -exec echo mv \{\}/content \{\} \; 

cevap

0

istenen isme yeniden adlandırma sonra bir ara aşamada bir .bak uzantılı dosyaları kaydetme ve:

find . -mindepth 2 -type f -exec bash -c 'mv "$1" "${1%/*}".bak' _ {} \; \ 
     -exec bash -c 'rm -r "${1%/*}"' _ {} \; && rename 's/\.bak$//' *.bak 

Örnek:

% tree              
. 
├── a.txt 
│   └── content 
├── b.pdf 
│   └── content 
└── c.mp3 
    └── content 

% find . -mindepth 2 -type f -exec bash -c 'mv "$1" "${1%/*}".bak' _ {} \; -exec bash -c 'rm -r "${1%/*}"' _ {} \; && rename 's/\.bak$//' *.bak 

% tree 
. 
├── a.txt 
├── b.pdf 
└── c.mp3 
+0

kod, a.txt.bak, b.pdf.bak ve c.mp3.bak dosyalarını oluşturdu ancak dosyaları özgün uzantılara yeniden adlandırmadı – Learner

+0

@Learner Sonunda adı değiştirilen 'yeniden adlandır'; 'a.txt.bak'' a.txt''… '' rename' komutuna sahip olup olmadığını kontrol edin .. – heemayl

+0

Yeniden adlandır komutum var. Bu hata verir * Yeniden adlandırılamaz * .bak *: Böyle bir dosya veya dizin yok. Bence, o yerde olmayan bir yerde .bak uzantısı arıyor. – Learner

0

Sadece bir kullanırsınız küçük bir senaryoda döngü.

#!/bin/bash 
DESTINATION=/home/whatever 
for dir in *; do 
    if [[ -e $dir/content ]]; then 
     mv $dir/content $DESTINATION/conent.${dir##*.} && rm -rf $dir 
    fi 
done 

& & yeniden adlandırma başarılı oldu sonra dizin sadece kaldırılır sağlayacağız.