在Linux命令行上将文件移动到匹配的文件夹

时间:2019-08-08 14:48:41

标签: linux bash shell cp mv

我想将文件复制或移动到匹配的文件夹中。 这些是我的文件名:

1-filename-aa.txt
2-filename-aa.txt
3-filename-aa.txt
1-filename-bb.txt
2-filename-bb.txt
3-filename-bb.txt

这些是我的文件夹名称:

aa_fa
bb_fb

我仅使用“ cp”命令尝试了静态示例,但我有40个这样的文件夹:

cp *aa.* aa_*/
cp *bb.* bb_*/

我需要一个循环,可能需要1行代码才能将这些文件复制或移动到匹配的文件夹中。

1 个答案:

答案 0 :(得分:1)

#for every file with extension
for file in *.*
do
    #extract catalog name
    ending=$(sed 's/.*-\(.*\)\.[^.]\+$/\1/g' <<< "$file")
    cp "$file" "${ending}_f${ending::1}"/
done

如果您的目录不遵循<2letter> _f <1letter>模式,则可以改用以下方式:

#for every file with extension

for file in *.*
do
    #extract catalog name
    ending=$(sed 's/.*-\(.*\)\.[^.]\+$/\1/g' <<< "$file")
    cp "$file" ${ending}_*/
done

如果*。*还不够,还可以检查$ file是否为目录

[ -d "$file" ] && continue