Как объединить файлы из разных подкаталогов?

Это похоже на аппаратную проблему, а не на ошибку ядра. Вы можете попробовать следующее:

  • переустановите кабель SATA
  • используйте другой кабель SATA
  • запустите диагностику SMART (самопроверки см. smartmontools )
  • запустите деструктивную badblocks scan

Если у вас есть запасной диск или компьютер, вы также можете попробовать переключиться (используйте другой диск на том же компьютере, используйте проблемный диск на другом компьютере), чтобы проверить, не виновата ли материнская плата. Поскольку у накопителя возникают проблемы под нагрузкой, простого dd if = / dev / zero of = ... с соответствующими параметрами размера может быть достаточно для воспроизведения ошибок.

Я не уверен, будет ли действовать гарантия на ваш накопитель, поскольку изначально это был внешний накопитель ...

3
04.06.2018, 06:54
3 ответа

Si está utilizando Bash y la cantidad de archivos de texto está contenida (, es decir, no excede el límite máximo de número de argumentos, que es muy grande pero no infinito ), puede lograrlo fácilmente con globstarcaracterística:

$ shopt -s globstar
$ cat **/*.txt > merged.txt

Un enfoque más general, aunque menos elegante, será usar findcomo controlador y hacer que llame caten cada archivo, agregando la salida:

$ find -name \*.txt -exec sh -c 'cat {} >> merged.out' \;

Aquí es necesario llamar a shporque desea agregar el resultado de cada cat. Asegúrese de que el archivo de salida tenga una extensión diferente o se encuentre fuera del árbol que está fusionando, o findpuede intentar concatenar la salida consigo mismo.

0
28.04.2021, 23:46

prueba con

find /path/to/source -type f -name '*.txt' -exec cat {} + >mergedfile

encuentra todos los archivos '*.txt' fen /path/to/sourcede forma recursiva para subdirectorios -y concatena todo en uno mergedfile.

Para concatenar cada archivo de subdirectorios -dentro de su directorio, haga:

find. -mindepth 1 -type d -execdir sh -c 'cat $1/*.txt >> $1/mergedfile' _ {} \;
7
28.04.2021, 23:46

Si tiene que hacer la concatenación en un orden particular, a continuación se concatenarán los archivos en orden lexicográfico (ordenados por nombres de ruta )enbash:

shopt -s globstar
for name in **/*.txt; do
    [ -f "$name" ] && cat <"$name"
done >merged.out

Esto es similar al comando find

find . -type f -name '*.txt' -exec cat {} ';' >merged.out

excepto que el orden puede ser diferente, se incluirían enlaces simbólicos a archivos regulares (agregue un && [ ! -L "$name" ]si no los quiere )y archivos ocultos (y archivos en directorios ocultos )serían excluidos (use shopt -s dotglobpara volver a agregarlos ).

0
28.04.2021, 23:46

Теги

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