директорий, которые я написал этот Баш скрипт:Поиск файлов в одной директории, которая не в другом
#!/bin/bash
DIR_TORRENTS="/home/simon/.wine/drive_c/users/simon/Datos de programa/uTorrent"
DIR_DESCARGA=/home/simon/torrent-descargas/
DIR_TEMPORAL=/home/simon/torrent-temporal/
cd "$DIR_TORRENTS"
rm -f /tmp/torrent_existentes
for torrent in *.torrent
do
nombre=`basename "$torrent" .torrent`
find "$DIR_TEMPORAL" "$DIR_DESCARGA" -maxdepth 2 -name "$nombre" -printf '%f.torrent\n' >> /tmp/torrent_existentes
done
С помощью этого скрипта я хочу, чтобы получить список торрент-файлы, данные по-прежнему существует в папках данных uTorrent.
Скрипт работает, за исключением случаев, когда имя файла имеет некоторые символы, такие как «[]
». Я думаю, проблема заключается в том, что «-name
« интерпретирует »$nombre
« как шаблон. Как я могу отключить это поведение?
Ну, я нашел решение этой: nombre=$(basename "$torrent" .torrent | sed 's/\[/\\[/g; s/\]/\\]/g')
Но теперь у меня есть еще одна проблема. Я хочу удалить торрент-файлы, данные которых отсутствуют в папках с данными uTorrent.
Я изменил мой предыдущий сценарий (этот сценарий не удаляет ничего, потому что я тестирую первый):
#!/bin/bash
DIR_TORRENTS="/home/simon/.wine/drive_c/users/simon/Datos de programa/uTorrent"
DIR_DESCARGA=/home/simon/torrent-descargas/
DIR_TEMPORAL=/home/simon/torrent-temporal/
cd "$DIR_TORRENTS"
for torrent in *.torrent
do
nombre=$(basename "$torrent" .torrent | sed 's/\[/\\[/g; s/\]/\\]/g')
if ! find "$DIR_TEMPORAL" "$DIR_DESCARGA" -maxdepth 2 -name "$nombre" &> /dev/null
then
echo "$torrent"
fi
done
Но это ничего не печатает, то почему?
Ну, это решается тоже:
#!/bin/bash
DIR_TORRENTS="/home/simon/.wine/drive_c/users/simon/Datos de programa/uTorrent"
DIR_DESCARGA=/home/simon/torrent-descargas/
DIR_TEMPORAL=/home/simon/torrent-temporal/
rm -f /tmp/torrent_existentes
cd "$DIR_TORRENTS"
for torrent in *.torrent
do
nombre=$(basename "$torrent" .torrent | sed 's/\[/\\[/g; s/\]/\\]/g')
find "$DIR_TEMPORAL" "$DIR_DESCARGA" -maxdepth 2 -name "$nombre" -printf '%f.torrent\n' >> /tmp/torrent_existentes
done
for torrent in *.torrent
do
if ! grep -Fq "$torrent" /tmp/torrent_existentes
then
rm "$torrent"
fi
done
Но есть ли способ, чтобы написать этот сценарий более просто?
try '... -name $ (quote" $ nombre ") ...' –
Спасибо, но это не сработает. –