Перейменуйте папку за допомогою скрипту, змінних від excel doc


1

Файлова система Linux

У мене каталог з 1500 папками. Я хочу використати документ excel, який містить 1500 імен папок в одному стовпчику та унікальний ідентифікатор у наступному. Я шукаю сценарій, щоб сценарій перейменував папки на новий унікальний ідентифікатор. Хтось може мені допомогти здається дуже легким, хоча я не знаю, як писати сценарії. Хто-небудь може надати посилання на сценарій в Інтернеті (я не зміг його знайти).

Look at volume A for folder Var#1 (from excel)

if present on Volume A then mv Var#1 to Var#2 (from excel)

loop and grab next line of excel doc

1
Якщо на це не відповідуть, коли я повернуся додому, я повернусь, але до цього часу - почніть з експорту Excel до CSV. Тоді звідти ви можете використовувати комбінацію перейменування та awk .
nerdwaller

?: Чи всі папки в одному каталозі, чи вам це потрібно для сканування крос-системи для папки A?
nerdwaller

Я погоджуюся, що експорт до CSV та робота з нього є хорошим підходом - за винятком того, що стає складним, якщо в будь-якому із старих імен є коми. Альтернативою є експорт до текстового файлу з обмеженою вкладкою. Звичайно, якщо старі назви містять вкладки, у нас є та сама проблема. І як зазначав @Richard, пробіли та вкладки в старих назвах викликають проблеми з більшістю рішень.
Скотт

Відповіді:


2

Гаразд, ось це:

за i в $ (cat test.csv)

робити

dir1 = $ (відлуння $ i | sed 's /,.*//')

dir2 = $ (відлуння $ i | sed 's /.*,//')

якщо [-d $ dir1]

тоді

якщо [-d $ dir2]

тоді

echo $ dir2 присутній, пропускаючи перехід від $ dir1 до $ dir2

ще

mv $ dir1 $ dir2

фі

фі

зроблено


Не впевнений, ви тестували це чи ні, але це не працює. Він друкує "cat \ ntest.csv" як $ {i} Вам потрібно загорнути "cat test.csv" у $ (cat test.csv)
nerdwaller

Тоді це має спрацювати.
nerdwaller

@nerdwaller: Дайте хлопцеві відпочити! Він вводив, for i in `cat test.csv`не розуміючи, як Super User інтерпретуватиме зворотні тики як елементи форматування.
Скотт

Я спробував відредагувати свій коментар, але це було занадто пізно відповідно до політики SU. Тож я зобов’язаний вибачитись за те, що натрапив негативно (ненавмисно).
nerdwaller

1
@nerdwaller: Мені вдалося знайти три способи повернення кліщів до появи: (1) Використовуйте зворотні коси риси. (2) Введіть чотири пробіли перед кожним рядком коду. (3) Наберіть <pre> на початку блоку коду та </pre> в кінці. Див. Довідку щодо редагування Super User Markdown , зокрема розділи попередньо відформатованого тексту та вбудованого HTML .
Скотт

0

Отже, я користувач linux, unix та mac та пишу сценарії perl та bash. Якщо у вас є корпус живлення або cygwin, ви можете виконати наступні дії, у Windows це теж може бути, але не затримуйте дихання:

Не роблячи все це, я думаю, ви повинні вміти сприймати це і мода так, як вам хочеться ...

  • Збережіть свої дані у файлі csv (somefile.csv)
  • У панцирній оболонці

bash> для temp_line в cat somefile.csv

робити

echo mv $ temp_line | sed 's /, / /'

зроблено> somefile.sh

Не запускайте наступний рядок, поки не будете впевнені, що він буде робити те, що ви хочете!

баш>. ./somefile.sh

Це повинно бути ... Зауважте, це швидкий злом, це можна записати за допомогою більшої перевірки помилок і того, що немає, і це було вверху голови :) Ще одна проблема, з якою ви можете зіткнутися, - це пробіли у файлі / імена режисера, просто додайте цитати. Якщо вам потрібно перевірити, чи є в каталозі, ви можете додати оператор if на зразок наступного:

bash> if [-d 'dir_name']; тоді ...; fi

Цього має бути достатньо самородків, не пишучи їх. Я можу пізніше надихнутися і написати це у подальшому пості.


0

Це не відповідь , але я вказую це як один, оскільки коментарі не дозволяють пристойного форматування, або це дуже багато тексту.

Очевидно, імена існуючих папок є унікальними (якщо припустити, що вони або всі в одній суперпапці, або вони представлені як повні імена - як вказував @nerdwaller). А унікальні ідентифікатори у другому стовпці за визначенням унікальні. Чи унікальні два стовпці (не перекриваються)? Розглянемо наступні дані:

          Стара назва Нова унікальна ідентифікація
To_be, _or_not_to_be, 1
that_is_the_question. 2
The_quick_brown_fox 3
стрибки_верху_те_лази_дог. 4
             ⋮ ⋮
Once_upon_a_midnight_dreary, 40
while_I_ponder, 41
слабкий і одяг, 42
             ⋮ ⋮
The_answer_to_the 56
ultimate_question_of_life, 57
the_universe, _and_everything_is 58
42 59
And_so_on ... 60

Якщо / коли ви намагаєтеся перейменувати , weak_and_weary,щоб 42, Ви зіткнетеся з існуючої 42папкою. Мабуть, найкращий спосіб вирішити це - перевірити старі імена папок на наявність імен, які відповідають шаблону унікальних ідентифікаторів, та обробити їх вручну.


Дякую всім, хто відповів на рішення мого питання. Я буду працювати над цим протягом наступного тижня або близько того. Я дам вам усім знати, як це відбувається, або якщо я зіткнуся з будь-якими проблемами, що є пробками.
Майк Кон

@Mike: Раді допомогти та ласкаво просимо до Супер Користувача. До речі, коли ви пишете коментар, орієнтований на конкретних людей, звичайно згадувати їх імена, передуючи символам "@", як у "@ Richard, @nerdwaller". Таким чином ми отримуємо сповіщення. Див відповівши в коментарі пунктів по форматування Коментар розділу на сторінці довідки уцінки редагування.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.