перемістити файл за списком у файл (з провідними пробілами)


12

У мене є файл, який містить імена файлів. Наприклад:

/tmp/list.txt (це з пробілами на початку кожного рядка):

  /tmp/file.log
  /app/nir/home.txt
  /etc/config.cust

Я хочу, використовуючи одну лінію, щоб перемістити всі файли , перераховані в /tmp/list.txtдо/app/dest

Тож має бути щось подібне:

cat /tmp/list.txt | xargs mv /app/dest/

Відповіді:


21

Ви просто не вистачаєте -tопції для mv(припускаючи GNU mv):

cat /tmp/list.txt | xargs mv -t /app/dest/

або коротше (надихнувши відповіді X Тіана):

xargs mv -t /app/dest/ < /tmp/list.txt

провідні (і можливі проміжні) пробіли видаляються. Пробіли між іменами файлів призведуть до проблем.

Якщо у назви файлів є пробіли чи вкладки, цитати чи зворотні риси, припускаючи, що GNU xargsви можете використовувати:

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/

Дякую, за відповідь. за допомогою цього я можу скласти список безлічі файлів з ім'ям [!] та перейти до іншої папки із наступним: ls | grep -e ". [!]]" | трійник 001.txt; sed 's / ^ * //' <001.txt | xargs -d '\ n' mv -t / destinypath /
інуказе

6

Припустимо, що імена файлів відносно здорові (немає нових рядків чи дивних символів):

while read file; do mv "$file" /app/dest/; done < list.txt 

Для вирішення дивних імен файлів (перерви, якщо ім'я файлу має новий рядок):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 

Привіт тердоне, як перемістити папки в новий каталог на основі їх відповідності у файлі csv? Чи можете ви мені допомогти з цим [ unix.stackexchange.com/questions/433068/… Дякую !!
користувач3351523

@ user3351523 Ваше запитання закрито. Попросити випадкових людей про допомогу це не змінить. Натомість відредагуйте питання та поясніть, як рішення у дублікатах вам не допомогли. Якщо щось "не вийшло", поясніть, як це не вдалося. Рішення повинні працювати для вас, тому вам потрібно пояснити, що відбувається, коли ви їх спробуєте.
тердон

Я це зробив. ви можете подивитися.
користувач3351523

@ user3351523 ви не пояснили, чому рішення дупи не підходять для вас. І ви не пояснили, як відповіді, які ви отримали, не вдається. Можливо, вам просто доведеться використовувати, cp -Hrале я не знаю, чи cpпідтримує OSX це.
тердон


1

Чисті xargs читання безпосередньо з файлу

xargs -l -i < flist  mv -v {} /app/dst

редагувати 1 - після коментаря @Anthon нижче,

xargs -I{} < flist  mv -v {} /app/dst

1
-iзастаріла, і це, або це заміна, - я маю на увазі -l/ --max-lines=1. І це призводить mvдо виконання кожного файлу окремо.
Антон

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.