Zadanie : Utwórz skrypt, który przyjmie 2 argumenty:
3.sh <directory> <destination>
Wyszukaj w pliku <directory>
podłańcuch „ moveme ” w treści pliku Przenieś pliki zawierające ciąg do katalogu<destination>
My Bash :
#!/bin/bash
if [ "$1" == "" ]; then
echo "Retry..."
else
if [ "$2" == "" ]; then
echo "Retry ..."
else
echo "Try to fiend in folder {$1} files with this content {123} "
grep -l "123" $1/*
#grep -c "123" $1/*
fi
fi
Pytanie : Jak przenieść znaleziony plik z jednego katalogu do drugiego?
mv $directory/$file $destination/$file
?Odpowiedzi:
grep
zwróci listę plików. Musisz wykonaćmv
na każdym z plików.Możesz użyć
xargs
zgodnie z sugestią w innej odpowiedzi, ale wolę ten on-line:Iteruje po liście plików zwróconych przez
grep
i przenosi je jeden po drugim.Może być konieczne dodanie sprawdzania błędów, więc tutaj jest bardziej czytelna wersja:
Ponadto uważam, że zwykle dobrym pomysłem jest zmiana zmiennej IFS przed tego rodzaju pętlą
W ten sposób unikniesz wielu problemów z plikami z białymi znakami w nazwie (chyba że mają osadzony znak nowej linii).
źródło
grep
<n> razy imv
<m> razy. Połączenia pętli forgrep
tylko raz.find
i jego-exec
możliwości. Powinieneś także dwukrotnie zacytować swoje zmienne.W rzeczywistości, aby sprawdzić nie. argumentów wystarczy sprawdzenie 2 $
Co ważniejsze, powinieneś obsłużyć możliwe nadpisania plików w 2 USD.
źródło
find
xargs
find … -print0 | xargs -0
źródło