この形式のディレクトリに多数のファイルがあり、*/*/*/*/*.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ファイル名に非標準記号を含むファイル名/ディレクトリに注意してください。リファレンスチェックのためこの質問と回答