List 将列表中的所有文件复制到唯一目录

List 将列表中的所有文件复制到唯一目录,list,shell,text,emacs,List,Shell,Text,Emacs,我试图获取一个包含文件列表的文本文件,并将它们全部复制到一个目录中。在此目录中,它们将具有唯一的目录名。文本文件结构示例如下所示: /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/0000

我试图获取一个包含文件列表的文本文件,并将它们全部复制到一个目录中。在此目录中,它们将具有唯一的目录名。文本文件结构示例如下所示:

/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
我需要一个shell命令或EMACS宏来遍历这个列表,并将它们全部复制到当前工作目录中的唯一目录中。唯一目录将取决于文件;例如,对于前两个文件,目录为

/001/00000003/s01_2011_11_01/

我曾尝试使用EMACS宏执行此操作,但无法使其正常工作。shell命令或EMACs宏可以工作。

简单到:

cat list | sed "s/^.*edf\/\(.*\)\/\(.*\)$/mkdir -p root_dir\/\1 \&\& cp \0 root_dir\/\1\/\2/" | sh
如果在OSX上-安装gnu sed并使用gsed而不是sed。在不使用| sh的情况下运行命令,查看它将执行什么操作。当然,一定要调整根目录