Переименуйте все файлы «file.txt» в каталог с несколькими подкаталогами

Если у меня есть directory1, у которого есть «file.txt» и подкаталоги: «неделя», «сегодня», «последний месяц». В «недели» и «в прошлом месяце» также «file.txt».

directory1/
    file.txt
    week/
        file.txt
    today/
    last month/
        file.txt

Как я мог, используя только одну строковую команду в терминале с командой mv или rename.ul, переименовать каждый "file.txt" в "directory1" в "new_file.txt"?

2
задан 05.05.2020, 05:02

4 ответа

Еще один способ избежать обмана абсолютного пути:

find directory1 -name file.txt -execdir mv {}  new_file.txt \;

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

3
ответ дан 05.05.2020, 05:02

Другое решение:

find directory1 -name file.txt -exec bash -c 'mv "{}" "$(dirname "{}")/new_file.txt"' \;
0
ответ дан 05.05.2020, 05:03

Еще один способ:

find directory1 -name file.txt -print0 | xargs -0 rename 's/file\.txt/new_file\.txt/'
0
ответ дан 05.05.2020, 05:03
find directory1/ -type f  -name file.txt | while read f; do d=$(dirname $f); mv "$d"/file.txt "$d"/new_file.txt; done
1
ответ дан 05.05.2020, 05:04
  • 1
    Вы забыли добавлять кавычки [приблизительно 111] $f - $(dirname "$f"). Вы также забыли удалять эхо .:) – gmhk 05.05.2020, 05:04
  • 2
    прокляните Вас для получения там первого:-), – Rob Bygrave 05.05.2020, 05:04

Теги

Похожие вопросы