Bash - 将一些具有相同扩展名和不同名称的文件复制到多个名为文件的文件夹中

Bash - Copy some files with same extensions and different names to multiple folders called like the files

我想为 linux 编写一个脚本,将几个具有相同扩展名但不同名称的文件复制到另一个目录中,该目录与我要复制的文件具有相同的文件夹并且与文件具有相同的名称,并且这些文件,一个接一个,在它们的文件夹中。

例如,我有这个:

Directory X -
             abcd.zip
             cdab.zip
             adcb.zip
             ...

我想要这样的副本:

Directory Y -
             abcd -
                   abcd.zip
             cdab -
                   cdba.zip
             adcb -
                   adcb.zip
             ...  -
                   ...

不知道我解释的对不对,不好意思

提前致谢。

已解决。我用这个:

cd x

for file in *.zip; do
name="${file%.*}";
mkdir -p $name;
cp $file $name;
done
rm *.zip

cd ..

rsync x/* y

试试这样的东西:

for file in *.zip
do
    destination=$(${filename%.*})##extract extension
    mkdir -p "${destination}" ## make directory if not present
    cp $file ${destination} ##copy the file
done

一个班轮:

for file in *.zip; do name="${file%.*}"; mkdir -p $name; cp $file $name/; done

应该这样做:

#!/bin/bash
directoryX=/pathtoX
directoryY=/pathtoY
for file in $directoryX/*; do
filename="${file##*/}"
dirname="${filename%%.*}"
cp "$file" "$directoryY"/"$dirname"/"$filename"
done

另一种使用find的单行:

find X -name *.zip -exec sh -c "dir=Y/$( basename {} .zip ) ; mkdir ${dir} && cp {} ${dir}/" \; 

之前:

.
├── X
│   ├── abcd.zip
│   ├── adcb.zip
│   └── cdab.zip
└── Y

之后:

.
├── X
│   ├── abcd.zip
│   ├── adcb.zip
│   └── cdab.zip
└── Y
    ├── abcd
    │   └── abcd.zip
    ├── adcb
    │   └── adcb.zip
    └── cdab
        └── cdab.zip

请注意,此方法使用标准工具,但未针对性能进行调整(它将为每个查找结果调用 4 个进程)。这只会是很多文件的问题(我的机器上每个额外的文件需要 4 毫秒)。

不过,在任何 shell 脚本解决方案中,您至少需要 2 个额外的进程(mkdircp)。