在linux命令行上将文件移动到匹配的文件夹
我想将文件复制或移动到匹配的文件夹中。 以下是我的文件名:在linux命令行上将文件移动到匹配的文件夹,linux,bash,shell,cp,mv,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-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_*/
我需要一个循环(可能是一行代码)来将这些文件复制或移动到匹配的文件夹。为了安全起见,我会在目标目录后添加
/
,这样文件就不会被重命名,如果目录不存在,可能以后会被删除。谢谢反馈。此代码看起来很棒,但我有一个问题。“文件名”和文件扩展名部分不相同。这些部分在所有文件中都是唯一的,比如“083833 aa.png”“673839393 aa.rtf”可能在sed命令中使用[a-zA-Z]*
而不是txt
?@cnknv I更新了答案。您也可以使用[a-zA-Z]而不是前面提到的[^.]。
#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
#for every file with extension
for file in *.*
do
#extract catalog name
ending=$(sed 's/.*-\(.*\)\.[^.]\+$/\1/g' <<< "$file")
cp "$file" ${ending}_*/
done
[ -d "$file" ] && continue