Bash-перемещение файлов с одинаковым именем из нескольких каталогов в pwd

скажем, у меня есть каталоги:

mydir1
mydir2
mydir3
mydir4

содержит файлы, начинающиеся с abcd

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

вот то, что я играл с:

for file in pwd; mv *abcd ../
29
задан atomh33ls
12.05.2023 12:51 Количество просмотров материала 3066
Распечатать страницу

1 ответ

CD в родительский каталог, затем:

for f in */abcd*;
do mv $f ./
done

, что будет соответствовать mydir1/abcdfoo,mydir2/abcdbar etc. и переместите их в pwd (родительский каталог). Если вы хотите искать только в директориях mydir*, вы можете указать

for f in mydir*/abcd*; 
do mv $f ./
done

вы также можете сделать

find . -name "abcd*" -type f -exec mv {} ./ \;

, который находит все обычные файлы (не dir) с именем abcd* и перемещает их в pwd. Find выглядит рекурсивно из каталога, указанного после команды find, то есть "."в данном случае. Можно использовать абсолютные пути, например:

find /path/to/the/parent/dir -name "abcd*" -type f -exec mv {} /path/to/the/destination/dir/ \;

предупреждение: я просто заметил это, когда попробовал. Если в разных каталогах есть несколько файлов с одинаковыми именами, например mydir1/abcdfoo, mydir2 / abcdfoo и так далее, все файлы, кроме одного, будут перезаписаны, оставив вам только один файл abcdfoo в Родительском каталоге.

3
отвечен stib 2023-05-13 20:39

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

Ваш ответ

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

Имя
Вверх