Как скопировать один файл, например, index.html

из источника

/backup/cpbackup/daily/a1/homedir/public_html/index.html
/backup/cpbackup/daily/b2/homedir/public_html/index.html
/backup/cpbackup/daily/c3/homedir/public_html/index.html
/backup/cpbackup/daily/d4/homedir/public_html/index.html
/backup/cpbackup/daily/e5/homedir/public_html/index.html
/backup/cpbackup/daily/f6/homedir/public_html/index.html

по назначению

/home/a1/public_html/index.html
/home/b2/public_html/index.html
/home/c3/public_html/index.html
/home/c4/public_html/index.html
/home/e5/public_html/index.html
/home/f6/public_html/index.html

Команда cp не может сделать это, чтобы скопировать все файлы в один каталог для каждого пользователя, так как я могу это сделать?

1 ответ1

1

Вы можете использовать цикл оболочки (скопируйте / вставьте это в окно терминала):

for user in a1 b2 c3 c4 e5 f6; do
 cp -p "/backup/cpbackup/daily/$user/homedir/public_html/index.html" \
    "/home/$user/public_html/";
done

Флаг -p заставляет cp сохранять атрибуты (владелец, группа, отметка времени) скопированных файлов.

Если вы хотите сделать это для всех пользователей (то есть для всех подкаталогов /backup/cpbackup/daily/), вы можете сделать что-то подобное, избегая ручного ввода имен пользователей:

for dir in /backup/cpbackup/daily/*; do user=$(basename $dir);
    cp -p "/backup/cpbackup/daily/$user/homedir/public_html/index.html" \
    "/home/$user/public_html/";
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .