Как переместить несколько файлов с пробелами в Linux

Привет, я новичок в Linux, я собираюсь спросить о перемещении файла в Linux с помощью awk и xargs, извиняюсь, если я публикую репост ..

У меня есть примерно 1000-5000 таких файлов:

-rw-rw-r-- 1 wm-файлы 77641 3 марта 11:20 sendOrder.ZBAM.0005167032-20130503 11:20:35.txt
-rw-rw-r-- 1 wm-файлы 77647 3 апр. 11: 20 sendOrder.ZBAM.0005167033-20130503 11:20:36.txt
-rw-rw-r-- 1 wm files 77655 3 мая 11:20 sendOrder.ZBAM.0005167034-20130503 11:20:37.txt < br>-rw-rw-r-- 1 wm-файлы 77661 3 мая 11:20 sendOrder.ZBAM.0005167035-20130503 11:20:38.txt
-rw-rw-r-- 1 wm-файлы 77556 3 мая 11:20 sendOrder.ZBAM.0005167036-20130503 11:20:39.txt
-rw-rw-r-- 1 wm files 77549 3 мая 11:20 sendOrder.ZBAM.0005167037-20130503 11:20:40. txt
-rw-rw-r-- 1 wm-файлы 77549 3 июня 11:20 sendOrder.ZBAM.0005167038-20130503 11:20:41.txt
-rw-rw-r-- 1 wm-файлы 77543 3 июня 11:20 sendOrder.ZBAM.0005167039-20130503 11:20:42.txt

Как видите, имя файла содержит пробелы по адресу -20130503 11:20:42.txt, поэтому я использую:

ШАГ 1

ls -la|grep -e "May"|awk "{print $9, $10}" > some.files


На шаге 1 у меня уже есть файл со списком, который я хочу переместить по месяцу "май" в файле some.files

ШАГ 2

xargs -0 some.files mv -t dir/newdir/

Шаг 2 не сработает. Что мне делать? Я использую Linux CentOS 5.3


person Ivan Herlambang    schedule 02.07.2013    source источник
comment
Этот вопрос кажется не по теме, потому что речь идет об использовании команд Unix.   -  person madth3    schedule 02.07.2013
comment
1. Не анализировать ls. 2. Используйте find, чтобы вывести список файлов, а затем либо направьте вывод на xargs, либо используйте параметр -exec. 3. Совершенствуйте свои навыки поиска; вы сможете найти множество примеров для подобных проблем.   -  person devnull    schedule 02.07.2013
comment
Могу ли я перечислить файл с помощью поиска? Поскольку мне нужен список файлов, относящихся к выбранному месяцу, именно по этой причине я использую awk.   -  person Ivan Herlambang    schedule 02.07.2013
comment
См. man find. Попробуйте посмотреть на некоторые вопросы справа (перечислены Related).   -  person devnull    schedule 02.07.2013


Ответы (2)


Вероятно, существует 400 способов сделать это. Использование find, вероятно, является более эффективным способом, но:

Вы можете использовать цикл for:

for i in `ls`; do mv $i dir/newdir/; done

Или цикл while с файлом, который вы создали на шаге 1:

ls -la|grep -e "May"|awk "{print $9, $10}" > some.files; cat some.files | while read mFILE; do mv $mFILE dir/newdir; done

Или с помощью find (где +30 больше, чем X дней):

find ./ -mtime +30 -exec mv dir/newdir {} \;

ИЛИ, если вы хотите использовать awk и xargs:

ls -la|grep -e "May"|awk "{print $9, $10}" | xargs mv dir/newdir/
person fyn    schedule 02.07.2013
comment
имейте в виду, что опция find также найдет файлы во вложенных папках! Вы можете добавить -maxdepth 1, чтобы предотвратить это. - person drevicko; 19.03.2015

С помощью GNU Parallel вы можете:

 ls | parallel -X mv {} dir/newdir/

Установка 10 секунд:

wget -O - pi.dk/3 | sh

Подробнее: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1.

person Ole Tange    schedule 04.07.2013