Thread View: pl.comp.os.linux
10 messages
10 total messages
Started by Roman Tyczka
Tue, 20 Dec 2022 18:58
Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: Roman Tyczka
Date: Tue, 20 Dec 2022 18:58
Date: Tue, 20 Dec 2022 18:58
12 lines
1475 bytes
1475 bytes
Potrzebuję polecenia do basha, które w strukturze wielopoziomowej katalogów zamieni w plikach określony ciąg znaków na inny określony ciąg znaków. finda bym jeszcze zrobił, ale jak to pokleić z resztą wymagań? po drugie jak poradzić sobie z katalogiem, który też taki ciąg będzie miał (też chciałbym go zmienić jeśli wystąpi)? -- pzdr Roman
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: Kamil Jońca
Date: Tue, 20 Dec 2022 19:02
Date: Tue, 20 Dec 2022 19:02
16 lines
1498 bytes
1498 bytes
Roman Tyczka <romantyczka@hate.you.spammer> writes: > Potrzebuję polecenia do basha, które w strukturze wielopoziomowej > katalogów zamieni w plikach określony ciąg znaków na inny określony > ciąg znaków. > > finda bym jeszcze zrobił, ale jak to pokleić z resztą wymagań? po > drugie jak poradzić sobie z katalogiem, który też taki ciąg będzie > miał (też chciałbym go zmienić jeśli wystąpi)? Że co? Piszesz to tak, że nija nie można wyrozumieć, czy chcesz zamieniać ciąg w zawartości pliku czy jego nazwie. KJ -- http://wolnelektury.pl/wesprzyj/teraz/
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: Roman Tyczka
Date: Tue, 20 Dec 2022 19:30
Date: Tue, 20 Dec 2022 19:30
30 lines
2147 bytes
2147 bytes
On 20.12.2022 20:02, Kamil Jońca wrote: > Roman Tyczka <romantyczka@hate.you.spammer> writes: > >> Potrzebuję polecenia do basha, które w strukturze wielopoziomowej >> katalogów zamieni w plikach określony ciąg znaków na inny określony >> ciąg znaków. >> >> finda bym jeszcze zrobił, ale jak to pokleić z resztą wymagań? po >> drugie jak poradzić sobie z katalogiem, który też taki ciąg będzie >> miał (też chciałbym go zmienić jeśli wystąpi)? > > Że co? Piszesz to tak, że nija nie można wyrozumieć, czy chcesz > zamieniać ciąg w zawartości pliku czy jego nazwie. > > KJ mam m.in. plik: jakiś_plik_z_nazwą_pliku.txt chcę zmienić "pl" na "dz", czyli nazwa się ma zmienić na: jakiś_dzik_z_nazwą_dziku.txt I tak we wszystkich plikach, we wszystkich podkatalogach, od katalogu nadrzędnego który będzie rootem dla tej operacji. -- pzdr Roman
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: marrgol
Date: Tue, 20 Dec 2022 20:01
Date: Tue, 20 Dec 2022 20:01
28 lines
1972 bytes
1972 bytes
On 20/12/2022 at 20.30, Roman Tyczka wrote:
> mam m.in. plik:
>
> jakiś_plik_z_nazwą_pliku.txt
>
> chcę zmienić "pl" na "dz", czyli nazwa się ma zmienić na:
>
> jakiś_dzik_z_nazwą_dziku.txt
>
> I tak we wszystkich plikach, we wszystkich podkatalogach, od katalogu
> nadrzędnego który będzie rootem dla tej operacji.
Moja propozycja (może to nie one-liner, ale da się zapisać w jednej
linii, jak ktoś musi… ;-)):
while read SRC
do
DST="$(basename "$SRC")"
mv "$SRC" "$(dirname "$SRC")/${DST//pl/dz}"
done < <(find /katalog/nadrzędny/ -depth)
To zmieni „pl” na „dz” w nazwach i plików, i katalogów.
Jeśli zmiana miałaby dotyczyć tylko plików, to trzeba zmienić
„-depth)” na „-depth -type f)”.
--
mrg
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: Pawel
Date: Tue, 20 Dec 2022 21:51
Date: Tue, 20 Dec 2022 21:51
29 lines
2231 bytes
2231 bytes
W dniu 20.12.2022 o 21:01, marrgol pisze:
> On 20/12/2022 at 20.30, Roman Tyczka wrote:
>> mam m.in. plik:
>>
>> jakiś_plik_z_nazwą_pliku.txt
>>
>> chcę zmienić "pl" na "dz", czyli nazwa się ma zmienić na:
>>
>> jakiś_dzik_z_nazwą_dziku.txt
>>
>> I tak we wszystkich plikach, we wszystkich podkatalogach, od katalogu
>> nadrzędnego który będzie rootem dla tej operacji.
>
> Moja propozycja (może to nie one-liner, ale da się zapisać w jednej
> linii, jak ktoś musi… ;-)):
>
> while read SRC
> do
> DST="$(basename "$SRC")"
> mv "$SRC" "$(dirname "$SRC")/${DST//pl/dz}"
> done < <(find /katalog/nadrzędny/ -depth)
>
> To zmieni „pl” na „dz” w nazwach i plików, i katalogów.
> Jeśli zmiana miałaby dotyczyć tylko plików, to trzeba zmienić
> „-depth)” na „-depth -type f)”.
>
>
Specem nie jestem, ale czy nie wystarczy uzyc find z opcja -exec? Czy to
nie powinno rozwiazac problemu?
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: Marcin Debowski
Date: Tue, 20 Dec 2022 22:58
Date: Tue, 20 Dec 2022 22:58
39 lines
2359 bytes
2359 bytes
On 2022-12-20, Pawel <ppf9@USUN_TOpoczta.fm> wrote:
> W dniu 20.12.2022 o 21:01, marrgol pisze:
>> On 20/12/2022 at 20.30, Roman Tyczka wrote:
>>> mam m.in. plik:
>>>
>>> jakiś_plik_z_nazwą_pliku.txt
>>>
>>> chcę zmienić "pl" na "dz", czyli nazwa się ma zmienić na:
>>>
>>> jakiś_dzik_z_nazwą_dziku.txt
>>>
>>> I tak we wszystkich plikach, we wszystkich podkatalogach, od katalogu
>>> nadrzędnego który będzie rootem dla tej operacji.
>>
>> Moja propozycja (może to nie one-liner, ale da się zapisać w jednej
>> linii, jak ktoś musi… ;-)):
>>
>> while read SRC
>> do
>> DST="$(basename "$SRC")"
>> mv "$SRC" "$(dirname "$SRC")/${DST//pl/dz}"
>> done < <(find /katalog/nadrzędny/ -depth)
>>
>> To zmieni „pl” na „dz” w nazwach i plików, i katalogów.
>> Jeśli zmiana miałaby dotyczyć tylko plików, to trzeba zmienić
>> „-depth)” na „-depth -type f)”.
>>
>>
> Specem nie jestem, ale czy nie wystarczy uzyc find z opcja -exec? Czy to
> nie powinno rozwiazac problemu?
A jak podmienisz fragment? Gołym findem bez bashowania to da się we
współpracy z takim dość sympatycznym programem rename.
find . -type f -exec rename 's/pl/dz/' {} \;
(dla bieżącego i głebiej)
--
Marcin
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: marrgol
Date: Tue, 20 Dec 2022 23:42
Date: Tue, 20 Dec 2022 23:42
18 lines
1727 bytes
1727 bytes
On 20/12/2022 at 23.58, Marcin Debowski wrote:
> find . -type f -exec rename 's/pl/dz/' {} \;
A co to za sympatyczny rename? :-) Bo ten (chyba) standardowy,
z util-linux, to tak nie umie:
$ ls
plik
$ rename 's/pl/dz/' plik
rename: not enough arguments
Try 'rename --help' for more information.
$ rename --version
rename from util-linux 2.37.2
$
--
mrg
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: Marcin Debowski
Date: Tue, 20 Dec 2022 23:59
Date: Tue, 20 Dec 2022 23:59
44 lines
2643 bytes
2643 bytes
On 2022-12-20, marrgol <marrgol@address.invalid> wrote:
> On 20/12/2022 at 23.58, Marcin Debowski wrote:
>> find . -type f -exec rename 's/pl/dz/' {} \;
>
> A co to za sympatyczny rename? :-) Bo ten (chyba) standardowy,
> z util-linux, to tak nie umie:
>
> $ ls
> plik
> $ rename 's/pl/dz/' plik
> rename: not enough arguments
> Try 'rename --help' for more information.
> $ rename --version
> rename from util-linux 2.37.2
Taki perlowski cudak, od pewnego czasu chyba standardowo dostępny we
wszystkich podstawowych dystrybucjach:
$ apt show rename
Package: rename
Version: 1.10-1
Priority: optional
Section: universe/perl
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 48.1 kB
Provides: libfile-rename-perl
Depends: perl (>= 5.26.0-6)
Conflicts: libfile-rename-perl
Breaks: perl (<< 5.26.0-6)
Replaces: libfile-rename-perl, perl (<< 5.26.0-6)
Homepage: https://metacpan.org/release/File-Rename
Download-Size: 16.1 kB
APT-Manual-Installed: yes
APT-Sources: http://ubuntu.mirror.myduniahost.com/ubuntu focal/universe amd64 Packages
Description: Perl extension for renaming multiple files
This package provides both a perl interface for renaming files
(File::Rename) and a command line tool 'rename' which is intended to
replace the version currently supplied by the perl package.
--
Marcin
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: kj99
Date: Wed, 28 Dec 2022 19:59
Date: Wed, 28 Dec 2022 19:59
19 lines
1917 bytes
1917 bytes
W dniu 20.12.2022 o 19:58, Roman Tyczka pisze:
>
> Potrzebuję polecenia do basha, które w strukturze wielopoziomowej
> katalogów zamieni w plikach określony ciąg znaków na inny określony ciąg
> znaków.
>
> finda bym jeszcze zrobił, ale jak to pokleić z resztą wymagań? po drugie
> jak poradzić sobie z katalogiem, który też taki ciąg będzie miał (też
> chciałbym go zmienić jeśli wystąpi)?
>
Spryciarzem nie jestem, ale sobie utworzyłem takie polecenie:
find . -type f -name '*.jpg' -exec rename -v 's/znakstary/znaknowy/g' *
'{}' \;
w tym przypadku byłoby:
find /home/jakaśnazwa -type f,d -name '*znakstary*' -exec rename -v
's/znakstary/znaknowy/g' * '{}' \;
--
Pozdrawiam
kj99
Re: Wyzwanie dla spryciarzy od one linerów bashowych :-P
Author: kj99
Date: Wed, 28 Dec 2022 20:04
Date: Wed, 28 Dec 2022 20:04
13 lines
1668 bytes
1668 bytes
W dniu 28.12.2022 o 20:59, kj99 pisze:
> find /home/jakaśnazwa -type f,d -name '*znakstary*' -exec rename -v
> 's/znakstary/znaknowy/g' * '{}' \;
Gwiazdki zniknęły:
find /home/jakaśnazwa -type f,d -name 'gwiazkaznakstarygwiazdka' -exec
rename -v 's/znakstary/znaknowy/g' * '{}' \;
Gwiazdki zniknęły:
find /home/jakaśnazwa -type f,d -name 'gwiazkaznakstarygwiazdka' -exec
rename -v 's/znakstary/znaknowy/g' * '{}' \;
--
Pozdrawiam
kj99
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads