Переименовать файл (префикс), указав полный путь?

Переименовать файл (префикс), указав полный путь?

Я бы добавил префикс к своим файлам ( .dat) следующим образом:

CLY_BIZ_COM_PERD.dat -> 20160622CLY_BIZ_COM_PERD.dat

Я попробовал следующее:

key=`date "+%Y%m%d"`
for i in $(ls /Path/*.dat); do mv ${i} "${key}${i}" ;done

Но эта командасуффиксмои файлы и не префиксить его. Как я могу это сделать?

решение1

Два изменения в вашем текущем сценарии:

  1. непарсинг ls;вместо этого полагайтесьна подстановке оболочки

  2. поскольку файлы находятся в подкаталоге, либо cdсначала запустите цикл, либо используйте basenameи dirnameдля извлечения частей каталога и имени файла перед добавлением префикса.

(Примечание: я также изменил ваш «/Path» на «./Path», поскольку не хотел создавать корневой каталог /Path. Однако применяются те же принципы.

Чтобы настроить несколько образцов файлов:

mkdir Path && cd Path
touch CLY_BIZ_COM_PERD.dat jeff.dat a.dat c\ d.dat
cd ..

Вот пример:

for f in ./Path/*.dat
do 
  printf "mv '%s' '%s'\n" "$f" "$(dirname "$f")/${key}$(basename "$f")"
done

Результат пробного прогона:

mv './Path/a.dat' './Path/20160622a.dat'
mv './Path/c d.dat' './Path/20160622c d.dat'
mv './Path/CLY_BIZ_COM_PERD.dat' './Path/20160622CLY_BIZ_COM_PERD.dat'
mv './Path/jeff.dat' './Path/20160622jeff.dat'

Как только вы будете удовлетворены, сделайте это по-настоящему:

for f in ./Path/*.dat
do 
  mv "$f" "$(dirname "$f")/${key}$(basename "$f")"
done

... и результат:

$ ls -1 Path
20160622a.dat
20160622c d.dat
20160622CLY_BIZ_COM_PERD.dat
20160622jeff.dat

Связанный контент