Можно использовать жемчуг Cygwin вместо этого. Типичные команды sed отображаются легко на Perl. Обратите внимание, что regex синтаксис отличается (расширенные регулярные выражения в Perl, основные регулярные выражения в sed).
perl -i -pe 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path)
Обратите внимание, что, анализируя результат замены команды, поскольку список файлов является хрупким. Это повредится, если будут пробелы или обратные косые черты в именах файлов; оба довольно распространены в соответствии с Windows (Вы получаете обратные косые черты, когда путь не был переведен от собственного компонента cygwin, например, когда он прибывает из переменной среды). Использовать xargs -d '\n'
вместо этого (нет никаких новых строк в именах файлов Windows).
grep -rl AAA /cygdrive/c/project_path | xargs -d '\n' perl -i -pe 's/AAA/BBB/g'
Если на Linux, при загрузке loop
модуль, удостоверьтесь, что Вы передаете a max_part
опция к модулю так, чтобы циклические устройства были partitionable.
Проверьте текущее значение:
cat /sys/module/loop/parameters/max_part
Если это 0:
modprobe -r loop # unload the module
modprobe loop max_part=31
Для установки этой персистентной настройки добавьте следующую строку к /etc/modprobe.conf
или в файл в /etc/modprobe.d
если тот каталог существует в Вашей системе:
options loop max_part=31
Если modprobe -r loop
сбои, потому что “Цикл модуля встроен”, необходимо будет добавить loop.max_part=31
к Вашей командной строке ядра и перезагрузке. Если Ваш загрузчик является Grub2, добавьте к нему к значению GRUB_CMDLINE_LINUX
в etc/default/grub
.
Теперь, можно создать partitionable циклическое устройство:
truncate -s64M file # no need to fill it with zeros, just make it sparse
fdisk file # create partitions
losetup /dev/loop0 file
mkfs.vfat /dev/loop0p1 # for the first partition.
mount /dev/loop0p1 /mnt/
(обратите внимание необходимость в относительно последней версии Linux).
losetup /dev/loop0 file -o 1048576 --sizelimit limit
Указанное смещение должно быть в байтах (1048576 = 2 048 секторов * 512 байтов за сектор).
mount -o loop,offset=1048576,sizelimit=limit
Для получения дополнительной информации см. losetup и смонтироваться.
Это можно сделать с помощью параметра bash:
## Make ** match all files and 0 or more dirs and subdirs
shopt globstar
## Iterate over all files and directories
for f in **; do
## Get the name of the parent directory of the
## current file/directory
dir=$(dirname "$f");
## If this file/dir ends with 3 digits and is a file
if [[ $f =~ [0-9]{3} ]] && [ -f "$f" ]; then
## Create the target directory
mkdir -p targetdir1/"$dir"
## Move the file
mv "$f" targetdir1/"$f"
else
## If this is a file but doesn't end with 3 digits
[ -f "$f" ] &&
## Make the target dir
mkdir -p targetdir2/"$dir" &&
## Move the file
mv "$f" targetdir2/"$f"
fi
done
-121--205218- losetup 2,21 -P
losetup -P -f --show my.img
Создает один /dev/loopXpY
на раздел.
Преимущество: исполняемый файл, предварительно установленный во многих distros (util-linux package).
Недостаток: совсем недавний вариант, отсутствует в Ubuntu 14.04.
losetup -P
automation
Использование:
$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2
$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there
$ sudo losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /full/path/to/my.img
$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0
Source:
los() (
img="$1"
dev="$(sudo losetup --show -f -P "$img")"
echo "$dev"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
echo "$dst"
sudo mkdir -p "$dst"
sudo mount "$part" "$dst"
done
)
losd() (
dev="/dev/loop$1"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
sudo umount "$dst"
done
sudo losetup -d "$dev"
)
kpartx
sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper
Output:
/dev/mapper/loop0
/dev/mapper/loop0p1
где loop0p1
является первым разделом, поэтому мы можем сделать:
mkdir -p d
sudo mount /dev/mapper/loop0p1 d
Преимущество этого метода: работает на Ubuntu 14,04 без перезагрузки.
-121--62237-Следующие процедуры позволяют монтировать разделы изображения для их изменения.
losetup 2,21 -P option
losetup -P -f --show my.img
Создание одного /dev/loopXpY
на раздел.
Преимущество: исполняемый файл, предварительно установленный во многих distros (util-linux package).
Недостаток: совсем недавний вариант, отсутствует в Ubuntu 14.04.
losetup -P
automation
Использование:
$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2
$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there
$ sudo losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /full/path/to/my.img
$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0
Source:
los() (
img="$1"
dev="$(sudo losetup --show -f -P "$img")"
echo "$dev"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
echo "$dst"
sudo mkdir -p "$dst"
sudo mount "$part" "$dst"
done
)
losd() (
dev="/dev/loop$1"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
sudo umount "$dst"
done
sudo losetup -d "$dev"
)
kpartx
sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper
Output:
/dev/mapper/loop0
/dev/mapper/loop0p1
где loop0p1
является первым разделом, поэтому мы можем сделать:
mkdir -p d
sudo mount /dev/mapper/loop0p1 d
Преимущество этого метода: работает на Ubuntu 14,04 без перезагрузки.
loop.max_part=31
к командной строке ядра А-ч – Alex 18.08.2013, 12:26loop.maxpart=31
илиloop.max_part=31
на командной строке ядра? – Cristian Ciupitu 04.10.2014, 19:49