2016-04-07 26 views
0

Dosyaların bir listesini içeren bir metin dosyası alıp hepsini bir dizine kopyalamaya çalışıyorum. Bu dizinde benzersiz dizin isimleri olacak. Metnin yapısını dosya örneği aşağıda görülebilir:Bir Listedeki tüm Dosyaları Bir Benzersiz Dizine Kopyalayın

/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000003/s01_2011_11_01/a_.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000003/s01_2011_11_01/a_1.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000003/s02_2011_11_11/a_.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000003/s02_2011_11_11/a_1.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s01_2009_02_13/a_.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s02_2010_10_02/a_.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s03_2010_10_02/a_.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s04_2010_10_03/a_.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s04_2010_10_03/a_1.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s04_2010_10_03/a_2.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s04_2010_10_03/a_3.edf 
/data/isip/data/tuh_eeg/v0.6.0/edf/001/00000005/s04_2010_10_03/a_4.edf 

Ben bu listeye geçmesi bir kabuk komutu veya EMACS makro ihtiyaç ve geçerli çalışma dizini içinde benzersiz dizinlere hepsini kopyalayın. Eşsiz dizin dosyaya bağlı olacaktır; örneğin, ilk iki dosyalar için, dizin Ben EMACS makro kullanarak bunu denedi

/001/00000003/s01_2011_11_01/ 

olurdu, ama işe almak mümkün değildi. Bir kabuk komutu veya EMACs makrosu işe yarayacaktı.

cevap

0

şey gibi basit:

cat list | sed "s/^.*edf\/\(.*\)\/\(.*\)$/mkdir -p root_dir\/\1 \&\& cp \0 root_dir\/\1\/\2/" | sh 

OSX'te ise - yüklemek gnu-sed ve kullanım gsed yerine sed. Çalıştır komutu yok | ne yapacağını görmek için. Tabii ki, root_dir'ü değiştirdiğinizden emin olun.

İlgili konular