1

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

mydir1
mydir2
mydir3
mydir4

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

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

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

for file in pwd; mv *abcd ../

1 ответ1

3

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

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.

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