2016-04-08 46 views
-2

我有這樣的文件 此列表是我的文件的一個示例,請注意實際文件不是成排順序。Linux:如何移動具有相同名稱的文件,比較分機。進入自己的文件夾?

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

使用或操作數而不是和:I.e. '||'。或者使用命令分隔符:';' –

回答

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 =和'cut'參數的設置將是你想要改變的位。 – Mel

相關問題