Рекурсивно перемещая все файлы определенного типа в целевой каталог в Bash
Как я могу переместить все .txt файлы из папки и всех включенных папок в целевой каталог.
И желательно переименовать их в папку, где они включены, хотя это не так важно. Я не совсем знаком с bash.
Ответы
Ответ 1
Чтобы рекурсивно перемещать файлы, объедините find
с mv
.
find src/dir/ -name '*.txt' -exec mv {} target/dir/ \;
Чтобы переименовать файлы при их перемещении, это сложнее. Один из способов - создать цикл, который передает каждое имя файла через tr / _
, который преобразует косые черты в символы подчеркивания.
find src/dir/ -name '*.txt' | while read file; do
mv "$file" "target/dir/$(tr / _ <<< "$file")"
done
Ответ 2
Попробуйте следующее:
find source -name '*.txt' | xargs -I files mv files target
Это будет работать быстрее, чем любая опция с -exec, поскольку она не будет вызывать синхронный процесс mv для каждого файла, который нужно переместить.
Ответ 3
Если это только один уровень:
mv *.txt */*.txt target/directory/somewhere/.