Если Вы не используете VMs для особых целей (например, должен клонировать VMs; копия/перемещение между серверами; имейте несколько различных тестовых сред; и т.д.), я предложил бы установить Linux как основную ОС для Ваших 95% операций и затем установил бы окна как VM из Linux для Вашего 5%-го действия операций окон. (Если Вашими 5% действия окон не является чрезвычайно ЦП / интенсивно использующий память; как использование фотошопа или редактирования видео.), Если у Вас есть Linux как Ваша основная ОС, она будет иметь полный доступ ко всей Вашей памяти и всем Вашим ядрам CPU. Однако, если в VM можно только присвоить небольшую часть ядер процессора памяти к нему; обычно в лучшем случае половина ресурсов машины может быть присвоена VM. Таким образом, если Вы будете иметь четырехъядерную машину с 8 ГБ RAM, но только присвоите 1 ядро и 2 ГБ к Вашему VM, то производительность в VM для 95% материала значительно пострадает.
Используя VM будет медленнее. Для большей части материала виртуализация в наше время очень хороша, и различие не будет заметным (кроме значимого понижения доступных центральных процессоров/RAM к VM); однако, если Вы должны представить себе аппаратное ускорение (например, для графики), Ваш VM не может перевести в Вашу карту правильно; таким образом, можно заметить, что video/3-d рендеринг значительно страдает в VM.
Можно использовать эту команду:
for folder in $(ls); do
for file in $(ls $folder); do
sed -i 's/_b//' $folder/$file
done
mv $folder ${folder/_b/}
done
Второй цикл редактирует содержание файлов, расположенных в папках.
После отъезда второго цикла сначала каждый переименовывает папки.
Иначе для контакта с пробелами в именах файлов, которые были бы интерпретированы как IFS:
ls | while read folder ; do
ls "$folder" | while read file; do
sed -i 's/_b//' "$folder/$file"
done
mv "$folder" "${folder/_b/}"
done
Необходимо всегда стараться не анализировать вывод ls
. Попробуйте это (благодаря stephane-chazelas для предложения ./*/
):
for folder in ./*/; do
sed -i 's/_b//g' "$f"/*; mv "$folder" "${folder/_b/}";
done
find
имеет те же проблемы как парсинг вывода ls
. Использовать -exec
с находкой или просто циклом */
: for folder in ./*/
– Stéphane Chazelas
19.02.2013, 16:16
IFS=
и -print0
(который я забыл в своем исходном ответе.
– terdon♦
19.02.2013, 18:14
-print0
, Вам нужно read -d ''
для которого Вам нужно zsh
или bash
. Отметьте for folder in ./*/
который я упомянул, ранее будет включать символьные ссылки на каталоги (желательно ли это или не)
– Stéphane Chazelas
19.02.2013, 19:26
bash
человек, верный. Почему Вам нужно -d
для bash
? Это, кажется, хорошо работает, как.
– terdon♦
19.02.2013, 21:37
Пожалуйста
root@testbox:~# mkdir test
root@testbox:~# cd test
root@testbox:~/test# mkdir -p a_b_x{1..10} # populate directories
root@testbox:~/test# printf 'a_b_x\na_b_y\nfoo\nbar\n' | \
tee a_b_x{1..10}/somefile # populate files
a_b_x
a_b_y
foo
bar
Переименуйте каталоги:
root@testbox:~/test# find . -name a_b_\* -type d -print0 | \
xargs -r0 rename -v 's/a_b_/a_/'
./a_b_x10 renamed as ./a_x10
./a_b_x5 renamed as ./a_x5
./a_b_x7 renamed as ./a_x7
./a_b_x4 renamed as ./a_x4
./a_b_x8 renamed as ./a_x8
./a_b_x3 renamed as ./a_x3
./a_b_x9 renamed as ./a_x9
./a_b_x6 renamed as ./a_x6
./a_b_x1 renamed as ./a_x1
./a_b_x2 renamed as ./a_x2
Файлы редактирования:
root@testbox:~/test# find . ! -name \*.bak -type f -print0 | xargs -r0 sed -i.bak 's,a_b_,a_,'
root@testbox:~/test# cat a_x4/somefile
a_x
a_y
foo
bar
Удалите резервные копии если все хорошо:
root@vm8583:~/test# find . -name \*.bak -type f -delete
rename
(prename
) от установки жемчуга по умолчанию на Debian, то же может быть достигнуто с rename
(rename.ul
) от пакета util-linux с немного отличающимся синтаксисом вызова: rename.ul -v a_b_ a_ ...
.
– artyom
20.02.2013, 05:55