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.