2016-04-08 4 views
-2

私はこのようなファイルを持っています このリストは私のファイルのサンプルです。実際のファイルは順不同です。Linux:同じ名前のファイルを移動する方法、diff ext。自分のフォルダに入れますか?

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 
+0

andの代わりにオペランドを使用します。 '||'。 ';' –

答えて

1

あなたはmkdir -p使用する必要があり、それは文句を言わないだろう(と&&を破る)ディレクトリが存在する場合(それらが存在しない場合、それはまた、親ディレクトリを作成します)。

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 
+0

それは私の実際のデータが連続していないというようなファイルに対してはうまくいくかもしれませんが mydata、yourdata – thomasb9511

+0

その場合は、ファイルのサンプルとそれらに入るディレクトリを与えてください。私はDIRNAMEの設定=と 'カット'パラメータがあなたが変更したいビットになることを期待しています。 – Mel

関連する問題