2016-10-26 4 views
1

У меня возникла проблема с резервным копированием на сервере linux, который каким-то образом переместил все папки файлов на один уровень в новую папку с тем же именем. Я хотел бы вернуть все файлы в исходное местоположение. Многие из файлов имеют пробелы в своих именах, чтобы усложнить ситуацию.Переместить все файлы на один уровень на один уровень

Оригинальная структура каталогов:

backup/folder 1/file 1 
backup/folder 1/file 2 
backup/folder 1/subfolder/file A 
backup/folder 2/file 1 
... 

Неправильная структура каталогов:

backup/folder 1/folder 1/file 1 
backup/folder 1/folder 1/file 2 
backup/folder 1/folder 1/subfolder/file A 
backup/folder 2/folder 2/file 1 
... 

Обратите внимание, что я не хочу, чтобы файл в подпапке, чтобы перейти в папку 1, но я хочу сам вложенную чтобы подняться на один уровень.

Я пробовал несколько команд, подобных этому, основываясь на несколько связанных потоках здесь, но не получил его на работу, вместо этого пытается переместить файлы в текущий каталог. Что я делаю не так?

найти. -mindepth 3 -maxdepth 3 -exec sh -c 'mv -v {} ..' \;

+0

Первые две результирующие линии исправны? Строка № 1 имеет только один дубликат, но строка №2 имеет два. – hidefromkgb

+0

извините, да, когда я отредактировал свой пост, я испортил это, теперь это правильно. Все файлы и подпапки перемещены на один уровень вниз. – rabidfurball

ответ

0

Вы можете адаптировать эти строки:

for file in * 
do 
    if [ -d "$file" ]; then 
    cd "$file" 
    if [ -d "$file" ]; then 
     cd "$file" 
     mv * .. 
     cd .. 
     #rm -r "$file" 
    fi 
    cd .. 
    fi 
done 

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

+0

прогресс, но это, кажется, остановилось после первого файла в тесте > test2/test2/test.txt > test3/test3/test.txt ---- становится ---- > test2/тест .txt > test2/test2 > test3/test3/test.txt > test3/test3 – rabidfurball

+0

Добавить echo "$ file" после _do_, чтобы увидеть, какой файл указан –

+0

Не хватает «cd ..», прошу прощения, я исправить код. –