我正在尝试在"_"
之前获取唯一的文件名,并仅复制这些文件。下面是脚本,但我必须遗漏一些关于sed
我的文件名示例 - P2.D2.C00_21,P2.D2.C00_22
#!/bin/bash
echo "Step 1"
names=$(ls ./Folder1 | sed 's//.*_//' | uniq)
echo "Step 2"
for name in `echo $names`
do
echo "Step 3"
files=($(ls -v ./Folder1/${name}.* | xargs -n1 basename))
echo "step 4"
cp -f ./Folder1/${files[${#files[@]} - 1]} ./folder2
echo "step 5"
done
答案 0 :(得分:1)
你采取了错误的方式:
word spliting
的错误。相反,请使用find
或while循环ls
输出,而是使用 globs 答案 1 :(得分:1)
这个找到_
之后的部分:
sed 's//.*_// # should be 's/_.*//'
但是因为你在uniq之后是全球化的,所以我根本看不到sed的好处。另外,使用ls
是一种非常糟糕的做法,你应该依赖于通配。
如果您不介意使用Perl:
for (glob("Folder1/*")) {
($a,$b,$c)=/((.*)_(.*))/;
push @{$h{$b}}, $c;
}
for $b(keys %h) {
system("cp '${b}_$h{$b}[-1]' folder2/");
}