一種のフォルダ(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]このコマンドはrename
Debian / Ubuntuとその派生、prename
Redhat / Fedoraとその派生に適用されます。