#! /bin/bash
find . -name "?* *" | while read DATEI
do
DATEI_NEU=`echo $DATEI | tr " " "_"`
mv "${DATEI}" "${DATEI_NEU}"
done
robi schrieb:versuche mal das ScriptCode:#! /bin/bash find . -name "?* *" | while read DATEI do DATEI_NEU=`echo $DATEI | tr " " "_"` mv "${DATEI}" "${DATEI_NEU}" done
robi
#!/bin/bash
for f in *\ *
do
mv "$f" "${f/ /_}"
done
#!/bin/bash
for f in *\ *
do
if [ -e "${f/ /_}" ]
then
echo "${f/ /_}" >> problem_dateien.txt
else
mv "$f" "${f/ /_}"
fi
done
Keine Ahnung was das bedeuten soll.~/test> ./test
mv: Aufruf von stat für ,,* *" nicht möglich: Datei oder Verzeichnis nicht gefunden
~/test>
kann es vielleicht daran liegen????Ein Metazeichen wird niemals vom jeweiligen Kommando interpretiert, sondern immer von der Shell. Aus diesem Grund funktioniert ein Kommando wie
user@sonne> cp *.x *.y
unter einer Unix -Shell nicht.
Robert.B schrieb:also das iss schon mal ganz gut![]()
danke aber geht es auch das datein in ordnern umbenannt werden?
und gehts nicht auch in einen staz...
ich muss das proggy immer x-mal starten...
#! /bin/bash
if [ $# -ne 1 ]; then echo "Aufruf: programm verzeichnis";fi
cd "$1"
find . -mindepth 1 -maxdepth 1 | while read DATEI
do
if [ -d "${DATEI}" ]; then
$0 "${DATEI}"
fi
if [ $(echo $DATEI | grep " " | wc -l ) = 1 ]; then
DATEI_NEU=`echo $DATEI | tr " " "_"`
mv "${DATEI}" "${DATEI_NEU}"
fi
done
script ./verzeichnis
${f/ /_}
${f// /_}
#!/bin/bash
for f in *\ *
do
if [ ! -e "$f" ] ; then exit 1 ; fi
if [ -e "${f// /_}" ]
then
echo "$(pwd)/${f// /_}" >> probleme
else
mv "$f" "${f// /_}"
fi
done
#!/bin/bash
# pfad für die Logdatei
CWD=`pwd`
LOG="$CWD/probleme.txt"
# benenne alle Dateien um
space2underline() {
for f in *\ *
do
if [ ! -e "$f" ] ; then return ; fi
if [ -e "${f// /_}" ]
then
echo "$(pwd): $f -- > ${f// /_} Datei existiert" >> "$LOG"
else
mv "$f" "${f// /_}"
fi
done
}
# rekursive tiefensuche
DFS() {
for i in *
do
[ -d "$i" ] || continue
cd "$i"
DFS
cd ..
done
# aktuelles Verzeichnis bearbeiten
space2underline
}
# tiefensuche starten
DFS
stimmtrobi schrieb:@TeXpert
Auf den ersten Blick sieht dein Script ja relativ normal aus, werde es heute abend mal austesten. Was mir auf dem erstem Blick aufgefallen ist, es ignoriert versteckte Dateien.
shopt -s dotglob
die FormenKannst du mal ${f// /_} ein bisschen genauer erklären?, habe diese Schreibweise so noch nie vorher gesehen.
${VARIABLE IRGENDWAS}
#!/bin/bash
STRING="12345678901234567890"
#der string
echo "$STRING"
echo "${STRING}"
# substrings
echo "${STRING:4}"
echo "${STRING:4:2}"
echo "${STRING:-4}"
echo "${STRING:(-4)}"
echo "${STRING:(-4):2}"
#substring removal
echo ${STRING#1*6}
echo ${STRING##1*6}
echo ${STRING%7*0}
echo ${STRING%%7*0}
#replacement
echo ${STRING/3/_}
echo ${STRING//3/_}
echo ${STRING/#1/_}
echo ${STRING/%0/_}
space2underline() {
for datei in *; do
mv "$datei" "`echo $datei | sed -e 's/\ /_/g'`.mp3" 2> /dev/null;
done
}
mv "$datei" "`echo $datei | sed -e 's/\ /_/g'`" 2> /dev/null;
TeXpert schrieb:dann hast Du das Problem, wenn die Datei schon existiert, die wird dann überschrieben.
mv: ,,rpm-tmp.16616.mp3" und ,,rpm-tmp.16616.mp3" sind die gleiche Datei
> touch a
> touch b
> mv -i b a
mv: ,,a" überschreiben? n
> mv b a
>
kann das an meiner bash liegen ?TeXpert schrieb:Das ist aber nicht default! das gilt nur wenn Du Dir den mv Befehl auf mv -i mit alias gemapped hast, sonst wird das gnadenlos überschrieben.
bash -version
GNU bash, version 3.00.0(1)-release (i586-suse-linux)
Copyright (C) 2004 Free Software Foundation, Inc.
robi schrieb:Wo ist denn hier die C-Shell und Perl Fraktion, kann man damit denn keine Dateien umbenennen?
#!/usr/bin/perl
# Usage: rename perlexpr [files]
use File::Glob qw(:glob);
($regexp = shift @ARGV) || die "Usage: rename perlexpr [filenames]\n";
if (!@ARGV) {
@ARGV = <STDIN>;
chomp(@ARGV);
}
foreach $_ (bsd_glob(@ARGV, GLOB_NOCASE)) {
$old_name = $_;
eval $regexp;
die $@ if $@;
rename($old_name, $_) unless $old_name eq $_;
}
exit(0);
find "irgendeinverz" -print | tac | rename.pl '($file) = (m|.+/(.+)|); $file = $_ if (!defined($file)); ($newfile = $file) =~ s/ /_/g; s/$file/$newfile/;'
veeery strangeoc2pus schrieb:kann das an meiner bash liegen ?TeXpert schrieb:Das ist aber nicht default! das gilt nur wenn Du Dir den mv Befehl auf mv -i mit alias gemapped hast, sonst wird das gnadenlos überschrieben.
Code:bash -version GNU bash, version 3.00.0(1)-release (i586-suse-linux) Copyright (C) 2004 Free Software Foundation, Inc.
bash --version
GNU bash, version 3.00.0(1)-release (i586-suse-linux)
Copyright (C) 2004 Free Software Foundation, Inc.
> mv --version
mv (coreutils) 5.2.1
> alias | grep -i mv
alias move='echo '\''Error: Try the command: mv -iv'\'''