Linux:如何移动具有相同名称的文件,diff ext。进入自己的文件夹?

时间:2016-04-08 10:24:07

标签: linux bash shell sh

我有这样的文件 此列表是我的文件示例,请注意实际文件不是成功的顺序。

file1.a
file2.a
file1.b
file2.b
...

有些人有.c扩展名但不是全部

如何将这些文件移动到自己的命名文件夹中。

我试过这个

find . -type f -print0 | xargs -0 -l sh -c 'mkdir "${1%.*}" && mv "$1" "${1%.*}"' sh

但它并没有按预期工作,即它创建文件夹但不会将同名的第二个文件放在同一个文件夹中。

mkdir: cannot create directory ‘./file1’: File exists
mkdir: cannot create directory ‘./file2’: File exists
mkdir: cannot create directory ‘./file3’: File exists

2 个答案:

答案 0 :(得分:1)

你应该使用mkdir -p,如果目录存在,它就不会抱怨(并打破&&)(如果那些目录不存在,它也会创建父目录)。 / p>

答案 1 :(得分:1)

for FILE in $(ls file[0-9].[a-z])
do
    DIRNAME=$(echo $FILE |cut -c1-5)
    [ -d $DIRNAME ] || mkdir $DIRNAME
    mv ${FILE}* $DIRNAME
done

This will give you:
$ ls file1 file2
file1:
file1.a  file1.b  file1.c

file2:
file2.a  file2.b  file2.c