ソースパスに基づいてコピーするときのファイル名の変更

ソースパスに基づいてコピーするときのファイル名の変更

この形式のディレクトリに多数のファイルがあり、*/*/*/*/*.txtパスのスラッシュを下線で置き換えて、そのファイルを別の場所にコピーしたいと思います。たとえば、ファイルがにある場合は、コピーした後にパスになるようにA/B/C/D/E.txtファイルをコピーしたいと思います。可能ですか?dest/dest/A_B_C_D_E.txt

ベストアンサー1

次のスクリプトを使用できます。

for i in `find . -type f -name "*.txt"`
do
newfile=$(echo $i|sed -s 's@/@_@g'|cut -c -3)
mv "$i" "dest/$newfile"
done

ファイル数が非常に多い場合は、以下を試してみwhileてください。for

while read i
do 
    newfile=$(echo $i|sed -s 's@/@_@g'|cut -c -3)
    mv "$i" "dest/$newfile"
done < (find . -type f -name "*.txt")

PSファイル名に非標準記号を含むファイル名/ディレクトリに注意してください。リファレンスチェックのためこの質問と回答

おすすめ記事