Объедините несколько каталогов, содержащих файлы с тем же именем

Я рыл через вопросы, но, может казаться, не нахожу точный ответ, в котором я нуждаюсь.

У меня есть каталог с несколькими подкаталогами:

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, но не вполне получил то, что я хотел бы.

3
задан 15 November 2018 в 20:22

1 ответ

Можно сделать это со сценарием как

#!/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.}.

2
ответ дан 1 December 2019 в 16:50

Другие вопросы по тегам:

Похожие вопросы: