Linux: 如何移动具有相同名称、不同扩展名的文件。到他们自己的文件夹?
Linux: How to move files with same name, diff ext. into their own folder?
我有这样的文件
此列表是我的文件示例,请注意实际文件不是按连续顺序排列的。
file1.a
file2.a
file1.b
file2.b
...
有些有 .c 扩展名,但不是全部
如何将这些文件移动到它们自己命名的文件夹中。
我试过了
find . -type f -print0 | xargs -0 -l sh -c 'mkdir "${1%.*}" && mv "" "${1%.*}"' sh
但它没有按预期工作,即它创建了文件夹,但不会将第二个同名不同扩展名的文件放在同一个文件夹中。
mkdir: cannot create directory ‘./file1’: File exists
mkdir: cannot create directory ‘./file2’: File exists
mkdir: cannot create directory ‘./file3’: File exists
你应该使用 mkdir -p
,如果目录存在,它不会抱怨(并破坏 &&
)(如果不存在,它也会创建父目录)。
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
我有这样的文件 此列表是我的文件示例,请注意实际文件不是按连续顺序排列的。
file1.a
file2.a
file1.b
file2.b
...
有些有 .c 扩展名,但不是全部
如何将这些文件移动到它们自己命名的文件夹中。
我试过了
find . -type f -print0 | xargs -0 -l sh -c 'mkdir "${1%.*}" && mv "" "${1%.*}"' sh
但它没有按预期工作,即它创建了文件夹,但不会将第二个同名不同扩展名的文件放在同一个文件夹中。
mkdir: cannot create directory ‘./file1’: File exists
mkdir: cannot create directory ‘./file2’: File exists
mkdir: cannot create directory ‘./file3’: File exists
你应该使用 mkdir -p
,如果目录存在,它不会抱怨(并破坏 &&
)(如果不存在,它也会创建父目录)。
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