2016-09-23 2 views
0

У меня есть Linux-система, в которой некоторые пользователи помещают файлы с ftp в каталог. В этом каталоге есть подкаталоги, которые пользователи могут создавать. Теперь мне нужен скрипт, который ищет все файлы в этих подкаталогах и перемещает их в один каталог (для резервного копирования). Проблема. Не следует удалять вспомогательные каталоги.Linux найти все файлы в подкаталогах и переместить их

Каталог для пользователей:/files/media/documents/ и файлы должны быть перемещены в каталоге/files/dump /. Мне не нужны файлы в/files/media/documents /, они уже обрабатываются другим скриптом.

Я уже попробовал этот скрипт:

for dir in /files/media/documents/ 
do 
    find "$dir/" -iname '*' -print0 | xargs -0 mv -t /files/dump/ 
done 

ответ

1

Вместо перебора, вы могли бы просто использовать найти. В человеко-странице есть опция «-типа» документирована, поэтому для перемещения только файлы вы могли бы сделать:

find "/files/media/documents/" -type f -print0 | xargs -0 mv -t /files/dump/ 

Вы также не будете хотели найти файлы в/файлов/СМИ/документы /, но все подкаталоги? Просто добавьте "-mindepth":

find "/files/media/documents/" -type f -mindepth 1 -print0 | xargs -0 mv -t /files/dump/ 

Alternativly вы можете также использовать "-exec", чтобы пропустить вторую команду (xargs):

find "/files/media/documents/" -type f -mindepth 1 -exec mv {} /files/dump/ \; 
+0

Я также нашел другой способ: для реж в/файлов/СМИ/документы/* сделать \t мв $ реж/*/файлы/сброс/ сделано это, кажется, работает, тоже –

+0

Thats правильно тоже, но это не будет работать с каталогами в вашем subdirector и также будут перемещать эти под-подкаталоги. Если это не имеет значения, чем ваш for-loop сделает то же самое ;-) –

+0

Я не забочусь о суб-подкаталогах, потому что, если они даже существуют, их тоже нужно перемещать :-) –

Смежные вопросы