Как я могу переместить все файлы .txt из папки и все включенные папки в целевой каталог.
И желательно переименовать их в папку, в которой они находятся, хотя это не так важно. Я не совсем знаком с bash.
Как я могу переместить все файлы .txt из папки и все включенные папки в целевой каталог.
И желательно переименовать их в папку, в которой они находятся, хотя это не так важно. Я не совсем знаком с bash.
Чтобы рекурсивно перемещать файлы, объедините 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
find src/dir -name '*.txt' -exec bash -c 'mv "$1" "${1//\//_}"' _ {} ';'
- person Josh Cartwright; 16.01.2013
Попробуй это:
find source -name '*.txt' | xargs -I files mv files target
Это будет работать быстрее, чем любой параметр с -exec, поскольку он не будет вызывать отдельный процесс mv для каждого файла, который необходимо переместить.
find source -name '*.txt' -print0 | xargs -0 -I files mv files target
- person cooperised; 04.03.2017
find . '*.srt' -print0 | xargs -0 -I files mv files
.
- person adamlogan; 16.09.2019
Если это только один уровень:
mv *.txt */*.txt target/directory/somewhere/.