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

Linux Bash-将一些具有相同扩展名和不同名称的文件复制到多个名为,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我想为linux编写一个脚本,将几个具有相同扩展名但名称不同的文件复制到另一个目录中,该目录与我要复制的文件具有相同的文件夹,并且与这些文件具有相同的名称,并且这些文件一个接一个地位于它们的文件夹中 例如,我有这样一个例子: Directory X - abcd.zip cdab.zip adcb.zip ... 有了副本,我想变成这样: Directory Y -

我想为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 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
请注意,此方法使用标准工具,但没有针对性能进行调优(它将为find的每个结果调用4个进程)。这只会是很多文件的问题(我的机器上每增加一个文件需要4毫秒)


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

您自己尝试过解决方案吗?谢谢您的回答。用这个我解决了问题。对不起,我要开始学习聚会了,我脑子里想的是KO。我不知道这不是很难。再次感谢大家。