как переместить файлы с несколькими шаблонами в определенный каталог, bash?

Похоже, этот диск умирает. Бьюсь об заклад, он тоже издает странные хрустящие звуки. (Это происходит из-за того, что головка постоянно движется, поскольку диск пытается перечитать данные, которые он не может прочитать без неисправимых ошибок.)

Как только вы сможете, скопируйте свои личные файлы с этого диска и замените диск. Он может / скоро катастрофически выйдет из строя, а потом вообще не сработает.

Если накопитель поддерживает SMART и у вас установлен smartmontools, вы можете запустить sudo smartctl -a / dev / sda и сообщить здесь результаты. Основываясь на результатах, вы могли бы затем запустить длительную автономную проверку (может занять час или два, в зависимости от размера диска), чтобы точно определить состояние диска, но я держу пари, основываясь на моем опыте, что он умирает . Вопрос только в том, как быстро он полностью выйдет из строя.

2
04.10.2017, 15:08
2 ответа

предположим, что ваши паттерны сохранены в файле с именем паттерны

mapfile -t arr < patterns && mv -t destination "${arr[@]}"
1
27.01.2020, 22:18

Самый эффективный, но, возможно, наименее разборчивый подход — просто перечислить все в одной большой счастливой mvкоманде.

mv Z_*ana_bwk_na_N*.png \
    Z_*ana_bwk_dwda*.png \
    Z_*ana_bwkman_dwdna* \
    Z_*ana_bwkman_dwdc* \
    Z_*EDZW*_nwv01*_p00_na_N*WV11.png \
    Z_*EDZW*_nwv01*_p00_nh_N*WV11.png \
    Z_*nwv01*_hsy_NA*.png \
    Z_*EDZW_*_htp_na_N_*_WV11SW.png \
    Z_*_rft_na_*.png \
    Z_*_r12* \
  destination

Если вы хотите разделить это (, возможно, из-за того, что вы получаете «слишком длинную командную строку» ), вы можете использовать здесь документ.

while read files; do
    mv $files dest
done <<____
    Z_*ana_bwk_na_N*.png
    Z_*ana_bwk_dwda*.png
    Z_*ana_bwkman_dwdna*
    Z_*ana_bwkman_dwdc*
    Z_*EDZW*_nwv01*_p00_na_N*WV11.png
    Z_*EDZW*_nwv01*_p00_nh_N*WV11.png
    Z_*nwv01*_hsy_NA*.png
    Z_*EDZW_*_htp_na_N_*_WV11SW.png
    Z_*_rft_na_*.png
    Z_*_r12*
____

Если вы хотите настроить адресата,вы тоже можете это сделать.

while read destination files; do
    mv $files "$destination"
done <<____
    here       Z_*ana_bwk_na_N*.png
    here       Z_*ana_bwk_dwda*.png
    here       Z_*ana_bwkman_dwdna*
    there      Z_*ana_bwkman_dwdc*
    there      Z_*EDZW*_nwv01*_p00_na_N*WV11.png
    everywhere Z_*EDZW*_nwv01*_p00_nh_N*WV11.png
    here       Z_*nwv01*_hsy_NA*.png
    elsewhere  Z_*EDZW_*_htp_na_N_*_WV11SW.png
    there      Z_*_rft_na_*.png
    anywhere   Z_*_r12*
____

Несколько сбивает с толку то, что подстановочные знаки в этом документе будут расширены оболочкой перед запуском цикла. Поскольку нам нужно, чтобы внутренний цикл не был заключен в кавычки, расширенные имена файлов не могут содержать никаких метасимволов оболочки (, которые не соответствуют точно только самим себе --обычно нерегулярным пробелам или выражениям с подстановочными знаками ).

0
27.01.2020, 22:18

Теги

Похожие вопросы