Объединение подпапок вместе, Linux - PullRequest
1 голос
/ 16 февраля 2012

У меня есть основная папка "Abc", которая имеет около 800 подпапок.Каждая из этих подпапок содержит множество файлов (все в одном формате, скажем, «.doc»).Как мне создать одну главную папку со всеми этими файлами (и не распределять по подпапкам).Я делаю это на компьютере с Windows 7, используя терминал cygwin.

Команда cp -r копирует ее, но оставляет файлы в подпапках, так что это не очень помогает.Буду признателен за помощь в этом.Спасибо!

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Если предположить, что могут быть конфликты имен и несколько расширений, это создаст уникальные имена, меняя пути к каталогам на тире (например, a/b/c.doc станет a-b-c.doc). Запустите это из папки, которую вы хотите свернуть:

# if globstar is not enabled, you'll need it.
shopt -s globstar
for file in */**; do [ -f "$file" ] && mv -i "$file" "${file//\//-}"; done
# get rid of the now-empty subdirectories.
find . -type d -empty -delete

Если вы можете гарантировать уникальные имена, это приведет к перемещению файлов и удалению подкаталогов. Вы можете изменить два . s на имя папки и запустить ее из-за пределов указанной папки:

find . -depth \( -type f -exec mv -i {} . \; \) -o \( -type d -empty -delete \)
0 голосов
/ 16 февраля 2012

Возможно, это не самый элегантный или эффективный способ сделать это, но я верю, что он достиг бы того, чего вы хотите:

for file in `find abc`
do
  if [ -f $file ]
  then
    mv $file `basename $file`
  fi
done

Переберите все в abc, проверьте, является ли это файл (не каталог), и если это так, переместите его из текущего местоположения (например, abc / d / example.txt) в abc /

Редактировать: Это оставило бы все подпапки на месте (но теперь они были бы пустыми)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...