Файловая система 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
Хорошо, вот оно:
для i в $(cat test.csv)
делать
dir1=$(echo $i|sed 's/,.*//')
dir2=$(echo $i|sed 's/.*,//')
если [ -d $dir1]
затем
если [ -d $dir2 ]
затем
echo $dir2 присутствует, пропускаем перемещение из $dir1 в $dir2
еще
мв $dir1 $dir2
фи
фи
сделанный
решение2
Итак, я пользователь linux, unix и mac и пишу скрипты perl и bash. Если у вас есть power shell или cygwin, вы можете сделать следующее, в Windows это тоже может быть, но не ждите:
Я думаю, что даже не делая всего этого, вы сможете взять это и модифицировать так, как вам хочется...
- Сохраните ваши данные в CSV-файл (somefile.csv)
- В оболочке bash
bash> для temp_line в
cat somefile.csv
делать
echo mv $temp_line |sed 's/,/ /'
сделано >somefile.sh
Не запускайте следующую строку, пока не будете уверены, что она сделает то, что вам нужно!
bash>. ./somefile.sh
Вот и все... Обратите внимание, это быстрый хак, его можно написать с большей проверкой ошибок и прочим, и это было навскидку:) Другая проблема, с которой вы можете столкнуться, это пробелы в именах файлов/каталогов, просто добавьте кавычки. Если вам нужно проверить, существует ли каталог, вы можете добавить оператор if, например, такой:
bash>если [ -d 'dir_name' ]; тогда ... ;fi
Этого должно быть достаточно, чтобы не писать об этом. Я могу вдохновиться позже и написать об этом в следующем посте.
решение3
Этоне ответ, но я ввожу его как таковой, потому что комментарии не позволяют нормального форматирования или такого количества текста.
Очевидно, что имена существующих папок уникальны (предполагая, что они либо все находятся в одной суперпапке, либо представлены как полные пути — как указал @nerdwaller). И уникальные идентификаторы во втором столбце по определению уникальны. Являются ли два столбца уникальными (неперекрывающимися)? Рассмотрим следующие данные:
Старое имя Новый уникальный идентификатор Быть_или_не_быть, 1 вот_какой_вопрос. 2 Быстрая_коричневая_лиса 3 прыгает_через_ленивую_собаку. 4 ⋮ ⋮ Однажды_в_полночь_тоскливо, 40 пока_я_размышлял, 41 слабый_и_усталый, 42 ⋮ ⋮ Ответ_на_вопрос_56 главный_вопрос_жизни, 57 вселенная, и_все_все_есть 58 42 59 И_так_на... 60
Если/когда вы попытаетесь переименовать weak_and_weary,
в 42
, вы столкнетесь с существующей 42
папкой. Вероятно, лучшим способом решения этой проблемы будет проверка старых имен папок на наличие имен, соответствующих шаблону уникальных идентификаторов, и ручная обработка.