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

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

mydir1
mydir2
mydir3
mydir4

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

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

Вот с чем я играл:

for file in pwd; mv *abcd ../

1 ответ

Решение

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

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

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

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

Вы могли бы также сделать

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

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

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

ВНИМАНИЕ: Я только заметил это, когда попробовал. Если в разных каталогах есть несколько файлов с одинаковыми именами, например, mydir1/abcdfoo, mydir2/abcdfoo и т. Д., Все, кроме одного, будут перезаписаны, и в родительском каталоге останется только один файл abcdfoo.

Другие вопросы по тегам