将文件复制到目录并将路径名添加到文件名

时间:2017-03-23 12:34:25

标签: unix

我有多个zip文件,每个文件都包含具有相同名称的文件,但zip文件具有唯一的名称。我想要做的是将多个拉链中具有相同名称的所有文件放在一个目录中,但是通过将zip文件夹名称添加到文件名来保留它们所属的zip。此外,拉链不一定具有相同的文件夹结构 - 具有相同名称的文件可以位于拉链内的任何文件夹中(但我不需要保留中间文件夹名称)。

例如,说我有

-> zip1 - folder1 - file1
                  - file2
-> zip2 - file1
        - file2

然后我想要的是将以下文件与连接名称一起获取:

- zip1file1
- zip1file2
- zip2file1
- zip2file2

'folder1'不会忽略 ,但我不在乎这两种方式,zip文件夹在名称中有重要信息。

到目前为止,我已经完成了

for zip in *.zip; do unzip "$zip" -d "${zip%.zip}"; done

将所有拉链解压缩到他们自己的唯一文件夹中,并使用我想要保留的名称。然后我可以使用包含所有解压缩文件的目录中的“find”找到所有相关文件的列表:

find . -name 'file1.m'

但我不确定如何将此'find'的结果移动到新目录中,并将它们所在文件夹的名称添加到其文件名中。

1 个答案:

答案 0 :(得分:0)

我会尽我所能

myfiles是移动文件的目录。 不是一个单行,但应该工作

DEST="./myfiles"
mkdir -p $DEST
find zip* -type f | while read f
do
  mv $f $DEST/${f//'/'}
done

将会:

mv zip1/folder1/file2 ./myfiles/zip1folder1file2
mv zip1/folder1/file1 ./myfiles/zip1folder1file1
mv zip2/file2 ./myfiles/zip2file2
mv zip2/file1 ./myfiles/zip2file1