Перемещение / Группировка файлов Unix - PullRequest
1 голос
/ 22 марта 2012

У меня есть одна папка, содержащая около 1000 файлов, и я хочу сгруппировать их в соответствии с их родственными папками.

Я сделал ls- R > updated.txt, чтобы получить исходные настройки папок и файлов.

updated. txt выглядит так:

./Rhodococcus_RHA1:
NC_008268.fna
NC_008269.fna
NC_008270.fna
NC_008271.fna

./Rhodoferax_ferrireducens_T118:
NC_007901.fna
NC_007908.fna

./Rhodopseudomonas_palustris_BisA53:
NC_008435.fna

./Rhodopseudomonas_palustris_BisB18:
NC_007925.fna

./Rhodopseudomonas_palustris_BisB5:
NC_007958.fna

./Rhodopseudomonas_palustris_CGA009:
NC_005296.fna
NC_005297.fna

Итак, глядя на этот файл, я знаю, какие файлы попадают в какую папку. Папка со всеми 1000 файлами вместе выглядит так:

results_NC_004193.fna.1.ebwt.map
results_NC_004307.fna.1.ebwt.map
results_NC_004310.fna.1.ebwt.map
results_NC_004311.fna.1.ebwt.map
results_NC_004337.fna.1.ebwt.map
results_NC_004342.fna.1.ebwt.map
results_NC_004343.fna.1.ebwt.map
results_NC_004344.fna.1.ebwt.map

и так далее ...

Вы можете видеть, что имена файлов всех 1000 файлов зависят от их оригинальных имен в настройках папки (если это хороший способ объяснить это).

Я хочу переместить эти results_XXXXXXXX файлы в папки (необходимо создать новые папки) с исходной настройкой. Так и должно быть примерно так:

./Rhodococcus_RHA1: (this is a folder)
results_NC_008268.fna.1.ebwt.map 
results_NC_008269.fna.1.ebwt.map
results_NC_008270.fna.1.ebwt.map
results_NC_008271.fna.1.ebwt.map

./Rhodoferax_ferrireducens_T118:
results_NC_007901.fna.1.ebwt.map
results_NC_007908.fna.1.ebwt.map

Я действительно не знаю, как это сделать ... может быть, какая-то команда mov? Буду признателен за помощь в решении этой проблемы.

1 Ответ

1 голос
/ 22 марта 2012

Запустите следующую команду из папки, где у вас есть эти 1000 файлов.Путь / к / оригиналу / файлам - это путь к исходным файлам (тот, который вы сделали ls -R).Вы должны получить список команд mv.Проверьте несколько из них, чтобы подтвердить, что они верны.Если так, добавьте |Затем выполните команду и повторите ее, чтобы выполнить эти команды.Если у вас нет всех соответствующих файлов в папке 1000 файлов, вы получите команды mv, которые будут возвращать «файл не найден», который можно игнорировать или передать в / dev / null.Это предполагает, что у вас всегда есть файл в исходной папке, чтобы он знал, куда переместить файл.Если нет, некоторые из этих 1000 файлов не будут перемещены.Как всегда, сделайте хорошую резервную копию, прежде чем сделать это.

find path/to/original/files -type f | awk -F"/" '{ path=$0; sub($NF, "", path); printf("mv results_%s.1.ebwt.map \"%s\"\n", $NF, path);}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...