Linux
如何根據文件名創建多個目錄並在linux中更改文件名?
我有一個
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.track
為soft.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