私は質問を掘り下げてきましたが、必要な正確な答えを見つけることができないようです。
複数のサブディレクトリがあるディレクトリがあります:
sent sent.~16~ sent.~22~ sent.~29~ sent.~35~ sent.~41~ sent.~48~ sent.~54~ sent.~60~ sent.~67~ sent.~73~ sent.~8~
sent.~10~ sent.~17~ sent.~23~ sent.~3~ sent.~36~ sent.~42~ sent.~49~ sent.~55~ sent.~61~ sent.~68~ sent.~74~ sent.~80~
sent.~11~ sent.~18~ sent.~24~ sent.~30~ sent.~37~ sent.~43~ sent.~5~ sent.~56~ sent.~62~ sent.~69~ sent.~75~ sent.~81~
sent.~12~ sent.~19~ sent.~25~ sent.~31~ sent.~38~ sent.~44~
各サブディレクトリが番号付きファイルの束を保持する場所:
1. 11. 13. 15. 17. 4. 6. 8.
10. 12. 14. 16. 3. 5. 7. 9.
基本的に、これらすべてのサブディレクトリを1つのディレクトリにマージしますが、同じ名前のファイルは上書きしません。これを行うには、各サブディレクトリ内のファイルの名前を変更する必要がありますか(例:foo --> foo_~10~)
、その後、すべてのファイルを1つのサブディレクトリにマージしますか?
これに使用できる簡単なbashまたはシェルスクリプトはありますか?私はrsync、mv、cpのバリエーションをいくつか試しましたが、私が望むものはまだ得られていません。
次のようなスクリプトでこれを行うことができます
#!/bin/bash
mkdir merged
for dir in sent*
do
cd "$dir"
for file in *
do
mv "$file" "$file"_"${dir#sent.}"
done
mv * ../merged
cd ..
done
質問のスキームに従って各ファイルの名前を変更する場合。辞書編集の順序がファイルの元のフォルダを反映するように名前を変更する場合は、文字列$file
と${dir#sent.}
の順序を変更するだけです。