查找和复制具有相同名称但扩展名不同的文件

时间:2014-07-18 16:19:14

标签: linux bash command-line

我目前有一个包含数千个.txt文件的大文件夹,以及每个文件的相应.wav文件,如下所示:

1.txt
1.wav
2.txt
2.wav

每个文件名都是一个随机数。

在此文件夹中,还有一些.trs和.wav文件对的.trs文件。

我需要做的是找到所有三元组数据并将它们复制到另一个文件夹,留下所有没有相应.trs文件的.txt和.wav文件。所以最后只有三个数据位于这个新文件夹中,如下所示:

4.txt
4.trs
4.wav
5.txt
5.trs
5.wav

我所能做的就是将所有.trs文件复制到一个单独的文件夹中,我不知道如何继续并完成此任务。

感谢您提供给我的所有帮助或提示。

2 个答案:

答案 0 :(得分:4)

for FILE in *.txt; do
    BASE=${FILE%.txt}
    [[ -e $BASE.trs && -e $BASE.wav ]] && cp "$FILE" "$BASE.trs" "$BASE.wav" /some/dir
done

要具体使用数字文件名,请使用扩展的globbing:

shopt -s extglob
for FILE in +([[:digit:]]).txt; do
    BASE=${FILE%.txt}
    [[ -e $BASE.trs && -e $BASE.wav ]] && cp "$FILE" "$BASE.trs" "$BASE.wav" /some/dir
done

答案 1 :(得分:0)

如果我是对的:对于每个trs文件,你有一个要复制的文本和wav文件:

for FILE in *.trs; do 
    BASENAME=${file%.trs}
    cp $FILE $BASENAME.txt  $BASENAME.wav somewhere/
done