🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#906768
Author: Roman Tyczka
Date: Tue, 20 Dec 2022 18:58
12 lines
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
#906769
Author: Kamil Jońca
Date: Tue, 20 Dec 2022 19:02
16 lines
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
#906770
Author: Roman Tyczka
Date: Tue, 20 Dec 2022 19:30
30 lines
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
#906772
Author: marrgol
Date: Tue, 20 Dec 2022 20:01
28 lines
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
#906773
Author: Pawel
Date: Tue, 20 Dec 2022 21:51
29 lines
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
#906774
Author: Marcin Debowski
Date: Tue, 20 Dec 2022 22:58
39 lines
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
#906775
Author: marrgol
Date: Tue, 20 Dec 2022 23:42
18 lines
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
#906776
Author: Marcin Debowski
Date: Tue, 20 Dec 2022 23:59
44 lines
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
#906777
Author: kj99
Date: Wed, 28 Dec 2022 19:59
19 lines
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
#906778
Author: kj99
Date: Wed, 28 Dec 2022 20:04
13 lines
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