Linux Bash-将一些具有相同扩展名和不同名称的文件复制到多个名为
我想为linux编写一个脚本,将几个具有相同扩展名但名称不同的文件复制到另一个目录中,该目录与我要复制的文件具有相同的文件夹,并且与这些文件具有相同的名称,并且这些文件一个接一个地位于它们的文件夹中 例如,我有这样一个例子:Linux Bash-将一些具有相同扩展名和不同名称的文件复制到多个名为,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我想为linux编写一个脚本,将几个具有相同扩展名但名称不同的文件复制到另一个目录中,该目录与我要复制的文件具有相同的文件夹,并且与这些文件具有相同的名称,并且这些文件一个接一个地位于它们的文件夹中 例如,我有这样一个例子: Directory X - abcd.zip cdab.zip adcb.zip ... 有了副本,我想变成这样: Directory Y -
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。我不知道这不是很难。再次感谢大家。