フォルダ名でファイル名を変更する

フォルダ名でファイル名を変更する

一種のフォルダ(A、B、C、D、E、F、G、H)があり、各フォルダにはすべてのフォルダに同じ名前のファイル(file.txt)がありますが、ファイルのサイズは次のとおりです。フォルダからフォルダへ。このファイルを各フォルダから新しいフォルダ(X)にコピーし、ファイル名を元のフォルダと同じにしたいと思います。このbachスクリプトを使用してファイルをコピーします。

#!/bin/bash      
insub_FIM_M_1=path to a parent folder conatin all the folders (A,B,C,D,E,F,G,H) 

for i in $(cat $insub_FIM_M_1/FIM_1.txt); do
cp  insub_FIM_M_1/${i} <path to the new folder X >
done

このコードでは、すべてのファイルは同じフォルダ内の名前を持つため、新しいフォルダ(X)からすべてのファイルが上書きされます。ファイルのソースを知るためにファイル名にフォルダ名を追加するには、このコードをどのように変更する必要がありますか?

ベストアンサー1

ディレクトリが親ディレクトリである特別な場合は、親ディレクトリでrename / prename [1]を使用してファイルをその親ディレクトリに移動できます。

rename -n 's:/:-:g' */file.txt

(テスト実行の場合は削除するか、実際の実行に-n置き換えます)-v

ファイルの深さが複数レベルの場合.txt(または深さが不明な場合)、globstarオプションを使用できます。

shopt -s globstar  # makes '**' match any levels of directories
rename -n 's:/:-:g' **/*.txt

[1]このコマンドはrenameDebian / Ubuntuとその派生、prenameRedhat / Fedoraとその派生に適用されます。

おすすめ記事