Я рыл через вопросы, но, может казаться, не нахожу точный ответ, в котором я нуждаюсь.
У меня есть каталог с несколькими подкаталогами:
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.
По существу я хотел бы объединить все эти подкаталоги в один каталог, но не файлы перезаписи с тем же именем. Буду я должен изменить имя файлов в каждом подкаталоге, чтобы сделать это (исключая: foo --> foo_~10~)
, и затем объедините все файлы с одним подкаталогом?
Существует ли легкий удар или сценарий оболочки, который я могу использовать для этого? Я попробовал некоторые изменения 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.}
.