Linux

如何根據文件名創建多個目錄並在linux中更改文件名?

  • November 14, 2020

我有一個AllData包含一些文件的目錄,如下所示:

AllData
|____ file_1to1000.track
|____ file_1001to2000.track
|____ file_2001to3000.track

根據文件名,我創建了帶有文件名的目錄。

for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done

我想在其中創建另一個目錄並保留文件。它應該如下所示:

AllData
|__ file_1to1000
         |___ cuffcompare
                  |____ file_1to1000.track

|__ file_1001to2000
         |___ cuffcompare
                  |____ file_1001to2000.track

|__ file_2001to3000
         |___ cuffcompare
                  |____ file_2001to3000.track

將文件移動到上述目錄後,文件名應從 更改file_1to1000.tracksoft.track. 目錄中的所有文件都需要從它們的原始文件名更改為soft.track它基本上應該如下所示:

AllData
|__ file_1to1000
         |___ cuffcompare
                  |____ soft.track

|__ file_1001to2000
         |___ cuffcompare
                  |____ soft.track

|__ file_2001to3000
         |___ cuffcompare
                  |____ soft.track

查看:

for file in ./*; do
   echo mkdir -p "${file%.*}"/cuffcompare/ && \
   echo mv "$file" "$_"soft.track
done

到班輪:

for file in ./*; do echo mkdir -p "${file%.*}"/cuffcompare/ && echo mv "$file" "$_"soft.track; done

注意:echo當您對試執行結果感到滿意時,請在上面刪除。


${file%.*}從文件名中去除最短匹配的後綴。所以它.track從這裡的文件名末尾剪切。已知參數擴展

$_是前一個命令的最後一個參數的替代品(參見shell 特殊參數);擴展為"${file%.*}"/cuffcompare/;

因此為找到的每個文件在下面創建mkdir目錄(-p如果不存在,則用於創建父目錄)結構;

└── file_2001to3000
   └── cuffcompare

然後mv將文件移動並重命名到其相關目錄,soft.tarck名稱為:

└── file_2001to3000
   └── cuffcompare
       └── soft.track

引用自:https://unix.stackexchange.com/questions/619627