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
答え1
確認する:
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
ここではファイル名の終わりから切り取り始めます。みんな知ってるパラメータ拡張
$_
前のコマンドの最後の引数を置き換えます(参照:シェル特殊パラメータ);次に拡張"${file%.*}"/cuffcompare/
。
したがって、見つかったファイルごとにmkdir
次のディレクトリ(-p
または存在しない場合は親ディレクトリを作成するために親ディレクトリが使用されます)構造が作成されます。
└── file_2001to3000
└── cuffcompare
次に、mv
ファイルを次のsoft.tarck
名前の関連ディレクトリに移動し、名前を変更します。
└── file_2001to3000
└── cuffcompare
└── soft.track