find + xargs-перемещение файлов из одного поддиректории в другую

моя структура папок выглядит так:

/volume1
  /photoTest
    /folderA
      /@eaDir
      /eaDir_tmp 
    /folderB
      /@eaDir
      /eaDir_tmp 
    /folder with space
      /@eaDir
      /eaDir_tmp 

что я пытаюсь сделать, это скопировать файлы из каждого eaDir_tmp в их @eaDir папка.

я был в состоянии получить это происходит через:

for a in $(find /volume1/photoTest -type d -name eaDir_tmp); do rsync -vhar --chmod=a+rwx $a/ $a/../@eaDir; done;

пока я не попал в папку с пробелами. Приведенный выше скрипт просто вываливается.

После много гуглить, я пытался:

find /volume1/photoTest -type d -name eaDir_tmp -print0 | xargs -0 rsync -vhra --chmod=a+rwx {} {}/../@eaDir

сухой запуск этой команды выполняется без проблем. Но фактический запуск застревает после печати.

sending incremental file list
@eaDir/subdir1/

и застревает в нем.

ps -elf | grep rsync показывает кучу rsync процессов на wait и poll_s государство.

кто-нибудь знает, что происходит? И каким может быть решение?

обновление: некоторые разъяснения на основе комментария:

  • переместить или скопировать? Ну конечная цель состоит в том, чтобы "двигаться". Но я хотел бы знать, как получить копию.
  • что происходит - да, я хотел бы знать, что происходит и почему мои команды работают не так, как ожидалось. Я надеюсь узнать что-то, поскольку я не обычный пользователь linux.
  • какое решение может быть? Ну, я тоже хотел бы это знать. 🙂
  • что внутри eaDir папки? Несколько папок, и файлы внутри них. Если это помогает, все началось с этого:https://github.com/mbrrg/synology-thumbgen. Автор предлагает удалить существующий @eaDir папки и просто переименовать eaDir_tmp. Но я не могу этого сделать, потому что существующие папки содержат файлы, которые я хотел бы сохранить. Я могу объяснить, но я думаю, что это еще больше запутает вопрос.
  • execdir работает-в том смысле, что он не говорит недопустимый аргумент или не выдает ошибку. Но это не достигает цели-то есть скопировать файлы правильно.
  • как богат мой find? Это внутри моего NAS Synology, который, как я думаю, работает BusyBox? Хотя не уверен. Как мне об этом узнать?
  • если файлы назначения существуют, тогда я хотел бы перезаписать его, если источник новее. Иначе нет.
25
задан Mrchief
03.04.2023 1:35 Количество просмотров материала 2781
Распечатать страницу

1 ответ

не знаю, почему rsync застревает. но я смог добиться некоторого прогресса, используя 2 команды:

First скопировать все файлы через:

find /volume1/photo -type d -name eaDir_tmp -exec cp -a -t {}/../@eaDir {}/. \;

Second, изменить права доступа к файлам:

find /volume1/photo -type d -name @eaDir -exec chmod 777 {} -R \;

мало того, что это неуклюже и медленно, но это чувствует, как я имею дело с MS-DOS. Где гуру linux?

0
отвечен Mrchief 2023-04-04 09:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх